package de.jadehs.cosima.parser.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.xtext.parsetree.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.xtext.conversion.ValueConverterException;
import de.jadehs.cosima.services.CosimaLangGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalCosimaLangParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_CHAR", "RULE_EPS", "RULE_ML_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'machine'", "'program'", "':'", "'regex'", "'tape'", "'='", "'{'", "'}'", "'&'", "'|'", "'*'", "'('", "')'", "'grammar'", "'transitions'", "'states'", "'->'", "','", "'<>'", "'read'", "'<-'", "'write'", "'left'", "'right'", "'loop'", "'while'", "'turing'", "'stack'", "'start'", "'normal'", "'end'", "'undefined'"
    };
    public static final int RULE_ID=4;
    public static final int RULE_STRING=5;
    public static final int RULE_ANY_OTHER=13;
    public static final int RULE_EPS=7;
    public static final int RULE_INT=9;
    public static final int RULE_ML_STRING=8;
    public static final int RULE_CHAR=6;
    public static final int RULE_WS=12;
    public static final int RULE_SL_COMMENT=11;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=10;

        public InternalCosimaLangParser(TokenStream input) {
            super(input);
        }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g"; }



     	private CosimaLangGrammarAccess grammarAccess;
     	
        public InternalCosimaLangParser(TokenStream input, IAstFactory factory, CosimaLangGrammarAccess grammarAccess) {
            this(input);
            this.factory = factory;
            registerRules(grammarAccess.getGrammar());
            this.grammarAccess = grammarAccess;
        }
        
        @Override
        protected InputStream getTokenFile() {
        	ClassLoader classLoader = getClass().getClassLoader();
        	return classLoader.getResourceAsStream("de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.tokens");
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "Cosima";	
       	}
       	
       	@Override
       	protected CosimaLangGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start entryRuleCosima
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:78:1: entryRuleCosima returns [EObject current=null] : iv_ruleCosima= ruleCosima EOF ;
    public final EObject entryRuleCosima() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCosima = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:79:2: (iv_ruleCosima= ruleCosima EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:80:2: iv_ruleCosima= ruleCosima EOF
            {
             currentNode = createCompositeNode(grammarAccess.getCosimaRule(), currentNode); 
            pushFollow(FOLLOW_ruleCosima_in_entryRuleCosima75);
            iv_ruleCosima=ruleCosima();
            _fsp--;

             current =iv_ruleCosima; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleCosima85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleCosima


    // $ANTLR start ruleCosima
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:87:1: ruleCosima returns [EObject current=null] : ( ( 'machine' ( (lv_machine_1_0= ruleMachine ) ) )? 'program' ( (lv_programs_3_0= ruleProgram ) )+ ) ;
    public final EObject ruleCosima() throws RecognitionException {
        EObject current = null;

        EObject lv_machine_1_0 = null;

        EObject lv_programs_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:92:6: ( ( ( 'machine' ( (lv_machine_1_0= ruleMachine ) ) )? 'program' ( (lv_programs_3_0= ruleProgram ) )+ ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:93:1: ( ( 'machine' ( (lv_machine_1_0= ruleMachine ) ) )? 'program' ( (lv_programs_3_0= ruleProgram ) )+ )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:93:1: ( ( 'machine' ( (lv_machine_1_0= ruleMachine ) ) )? 'program' ( (lv_programs_3_0= ruleProgram ) )+ )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:93:2: ( 'machine' ( (lv_machine_1_0= ruleMachine ) ) )? 'program' ( (lv_programs_3_0= ruleProgram ) )+
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:93:2: ( 'machine' ( (lv_machine_1_0= ruleMachine ) ) )?
            int alt1=2;
            int LA1_0 = input.LA(1);

            if ( (LA1_0==14) ) {
                alt1=1;
            }
            switch (alt1) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:93:4: 'machine' ( (lv_machine_1_0= ruleMachine ) )
                    {
                    match(input,14,FOLLOW_14_in_ruleCosima121); 

                            createLeafNode(grammarAccess.getCosimaAccess().getMachineKeyword_0_0(), null); 
                        
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:97:1: ( (lv_machine_1_0= ruleMachine ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:98:1: (lv_machine_1_0= ruleMachine )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:98:1: (lv_machine_1_0= ruleMachine )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:99:3: lv_machine_1_0= ruleMachine
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getCosimaAccess().getMachineMachineParserRuleCall_0_1_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleMachine_in_ruleCosima142);
                    lv_machine_1_0=ruleMachine();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getCosimaRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"machine",
                    	        		lv_machine_1_0, 
                    	        		"Machine", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,15,FOLLOW_15_in_ruleCosima154); 

                    createLeafNode(grammarAccess.getCosimaAccess().getProgramKeyword_1(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:125:1: ( (lv_programs_3_0= ruleProgram ) )+
            int cnt2=0;
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( (LA2_0==RULE_ID||LA2_0==17||(LA2_0>=27 && LA2_0<=28)||(LA2_0>=38 && LA2_0<=40)) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:126:1: (lv_programs_3_0= ruleProgram )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:126:1: (lv_programs_3_0= ruleProgram )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:127:3: lv_programs_3_0= ruleProgram
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getCosimaAccess().getProgramsProgramParserRuleCall_2_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleProgram_in_ruleCosima175);
            	    lv_programs_3_0=ruleProgram();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getCosimaRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"programs",
            	    	        		lv_programs_3_0, 
            	    	        		"Program", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt2 >= 1 ) break loop2;
                        EarlyExitException eee =
                            new EarlyExitException(2, input);
                        throw eee;
                }
                cnt2++;
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleCosima


    // $ANTLR start entryRuleMachine
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:157:1: entryRuleMachine returns [EObject current=null] : iv_ruleMachine= ruleMachine EOF ;
    public final EObject entryRuleMachine() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMachine = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:158:2: (iv_ruleMachine= ruleMachine EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:159:2: iv_ruleMachine= ruleMachine EOF
            {
             currentNode = createCompositeNode(grammarAccess.getMachineRule(), currentNode); 
            pushFollow(FOLLOW_ruleMachine_in_entryRuleMachine212);
            iv_ruleMachine=ruleMachine();
            _fsp--;

             current =iv_ruleMachine; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMachine222); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleMachine


    // $ANTLR start ruleMachine
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:166:1: ruleMachine returns [EObject current=null] : ( (lv_components_0_0= ruleComponent ) )+ ;
    public final EObject ruleMachine() throws RecognitionException {
        EObject current = null;

        EObject lv_components_0_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:171:6: ( ( (lv_components_0_0= ruleComponent ) )+ )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:172:1: ( (lv_components_0_0= ruleComponent ) )+
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:172:1: ( (lv_components_0_0= ruleComponent ) )+
            int cnt3=0;
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==RULE_ID) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:173:1: (lv_components_0_0= ruleComponent )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:173:1: (lv_components_0_0= ruleComponent )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:174:3: lv_components_0_0= ruleComponent
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getMachineAccess().getComponentsComponentParserRuleCall_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleComponent_in_ruleMachine267);
            	    lv_components_0_0=ruleComponent();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getMachineRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"components",
            	    	        		lv_components_0_0, 
            	    	        		"Component", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt3 >= 1 ) break loop3;
                        EarlyExitException eee =
                            new EarlyExitException(3, input);
                        throw eee;
                }
                cnt3++;
            } while (true);


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleMachine


    // $ANTLR start entryRuleProgram
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:204:1: entryRuleProgram returns [EObject current=null] : iv_ruleProgram= ruleProgram EOF ;
    public final EObject entryRuleProgram() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleProgram = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:205:2: (iv_ruleProgram= ruleProgram EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:206:2: iv_ruleProgram= ruleProgram EOF
            {
             currentNode = createCompositeNode(grammarAccess.getProgramRule(), currentNode); 
            pushFollow(FOLLOW_ruleProgram_in_entryRuleProgram303);
            iv_ruleProgram=ruleProgram();
            _fsp--;

             current =iv_ruleProgram; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleProgram313); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleProgram


    // $ANTLR start ruleProgram
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:213:1: ruleProgram returns [EObject current=null] : (this_Transitions_0= ruleTransitions | this_Regex_1= ruleRegex | this_Grammar_2= ruleGrammar | this_Loop_3= ruleLoop | this_While_4= ruleWhile | this_Turing_5= ruleTuring ) ;
    public final EObject ruleProgram() throws RecognitionException {
        EObject current = null;

        EObject this_Transitions_0 = null;

        EObject this_Regex_1 = null;

        EObject this_Grammar_2 = null;

        EObject this_Loop_3 = null;

        EObject this_While_4 = null;

        EObject this_Turing_5 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:218:6: ( (this_Transitions_0= ruleTransitions | this_Regex_1= ruleRegex | this_Grammar_2= ruleGrammar | this_Loop_3= ruleLoop | this_While_4= ruleWhile | this_Turing_5= ruleTuring ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:219:1: (this_Transitions_0= ruleTransitions | this_Regex_1= ruleRegex | this_Grammar_2= ruleGrammar | this_Loop_3= ruleLoop | this_While_4= ruleWhile | this_Turing_5= ruleTuring )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:219:1: (this_Transitions_0= ruleTransitions | this_Regex_1= ruleRegex | this_Grammar_2= ruleGrammar | this_Loop_3= ruleLoop | this_While_4= ruleWhile | this_Turing_5= ruleTuring )
            int alt4=6;
            switch ( input.LA(1) ) {
            case RULE_ID:
                {
                int LA4_1 = input.LA(2);

                if ( (LA4_1==16) ) {
                    switch ( input.LA(3) ) {
                    case 40:
                        {
                        alt4=6;
                        }
                        break;
                    case 39:
                        {
                        alt4=5;
                        }
                        break;
                    case 28:
                        {
                        alt4=1;
                        }
                        break;
                    case 27:
                        {
                        alt4=3;
                        }
                        break;
                    case 38:
                        {
                        alt4=4;
                        }
                        break;
                    case 17:
                        {
                        alt4=2;
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("219:1: (this_Transitions_0= ruleTransitions | this_Regex_1= ruleRegex | this_Grammar_2= ruleGrammar | this_Loop_3= ruleLoop | this_While_4= ruleWhile | this_Turing_5= ruleTuring )", 4, 8, input);

                        throw nvae;
                    }

                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("219:1: (this_Transitions_0= ruleTransitions | this_Regex_1= ruleRegex | this_Grammar_2= ruleGrammar | this_Loop_3= ruleLoop | this_While_4= ruleWhile | this_Turing_5= ruleTuring )", 4, 1, input);

                    throw nvae;
                }
                }
                break;
            case 28:
                {
                alt4=1;
                }
                break;
            case 17:
                {
                alt4=2;
                }
                break;
            case 27:
                {
                alt4=3;
                }
                break;
            case 38:
                {
                alt4=4;
                }
                break;
            case 39:
                {
                alt4=5;
                }
                break;
            case 40:
                {
                alt4=6;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("219:1: (this_Transitions_0= ruleTransitions | this_Regex_1= ruleRegex | this_Grammar_2= ruleGrammar | this_Loop_3= ruleLoop | this_While_4= ruleWhile | this_Turing_5= ruleTuring )", 4, 0, input);

                throw nvae;
            }

            switch (alt4) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:220:5: this_Transitions_0= ruleTransitions
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getProgramAccess().getTransitionsParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleTransitions_in_ruleProgram360);
                    this_Transitions_0=ruleTransitions();
                    _fsp--;

                     
                            current = this_Transitions_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:230:5: this_Regex_1= ruleRegex
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getProgramAccess().getRegexParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleRegex_in_ruleProgram387);
                    this_Regex_1=ruleRegex();
                    _fsp--;

                     
                            current = this_Regex_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 3 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:240:5: this_Grammar_2= ruleGrammar
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getProgramAccess().getGrammarParserRuleCall_2(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleGrammar_in_ruleProgram414);
                    this_Grammar_2=ruleGrammar();
                    _fsp--;

                     
                            current = this_Grammar_2; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 4 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:250:5: this_Loop_3= ruleLoop
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getProgramAccess().getLoopParserRuleCall_3(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleLoop_in_ruleProgram441);
                    this_Loop_3=ruleLoop();
                    _fsp--;

                     
                            current = this_Loop_3; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 5 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:260:5: this_While_4= ruleWhile
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getProgramAccess().getWhileParserRuleCall_4(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleWhile_in_ruleProgram468);
                    this_While_4=ruleWhile();
                    _fsp--;

                     
                            current = this_While_4; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 6 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:270:5: this_Turing_5= ruleTuring
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getProgramAccess().getTuringParserRuleCall_5(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleTuring_in_ruleProgram495);
                    this_Turing_5=ruleTuring();
                    _fsp--;

                     
                            current = this_Turing_5; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleProgram


    // $ANTLR start entryRuleRegex
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:286:1: entryRuleRegex returns [EObject current=null] : iv_ruleRegex= ruleRegex EOF ;
    public final EObject entryRuleRegex() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRegex = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:287:2: (iv_ruleRegex= ruleRegex EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:288:2: iv_ruleRegex= ruleRegex EOF
            {
             currentNode = createCompositeNode(grammarAccess.getRegexRule(), currentNode); 
            pushFollow(FOLLOW_ruleRegex_in_entryRuleRegex530);
            iv_ruleRegex=ruleRegex();
            _fsp--;

             current =iv_ruleRegex; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRegex540); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleRegex


    // $ANTLR start ruleRegex
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:295:1: ruleRegex returns [EObject current=null] : ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'regex' 'tape' '=' ( ( RULE_ID ) ) '{' ( (lv_expression_8_0= ruleExpression ) ) '}' ) ;
    public final EObject ruleRegex() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_expression_8_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:300:6: ( ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'regex' 'tape' '=' ( ( RULE_ID ) ) '{' ( (lv_expression_8_0= ruleExpression ) ) '}' ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:301:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'regex' 'tape' '=' ( ( RULE_ID ) ) '{' ( (lv_expression_8_0= ruleExpression ) ) '}' )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:301:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'regex' 'tape' '=' ( ( RULE_ID ) ) '{' ( (lv_expression_8_0= ruleExpression ) ) '}' )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:301:2: () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'regex' 'tape' '=' ( ( RULE_ID ) ) '{' ( (lv_expression_8_0= ruleExpression ) ) '}'
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:301:2: ()
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:302:5: 
            {
             
                    temp=factory.create(grammarAccess.getRegexAccess().getRegexAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getRegexAccess().getRegexAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:312:2: ( ( (lv_name_1_0= RULE_ID ) ) ':' )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==RULE_ID) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:312:3: ( (lv_name_1_0= RULE_ID ) ) ':'
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:312:3: ( (lv_name_1_0= RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:313:1: (lv_name_1_0= RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:313:1: (lv_name_1_0= RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:314:3: lv_name_1_0= RULE_ID
                    {
                    lv_name_1_0=(Token)input.LT(1);
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRegex592); 

                    			createLeafNode(grammarAccess.getRegexAccess().getNameIDTerminalRuleCall_1_0_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getRegexRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_1_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,16,FOLLOW_16_in_ruleRegex607); 

                            createLeafNode(grammarAccess.getRegexAccess().getColonKeyword_1_1(), null); 
                        

                    }
                    break;

            }

            match(input,17,FOLLOW_17_in_ruleRegex619); 

                    createLeafNode(grammarAccess.getRegexAccess().getRegexKeyword_2(), null); 
                
            match(input,18,FOLLOW_18_in_ruleRegex629); 

                    createLeafNode(grammarAccess.getRegexAccess().getTapeKeyword_3(), null); 
                
            match(input,19,FOLLOW_19_in_ruleRegex639); 

                    createLeafNode(grammarAccess.getRegexAccess().getEqualsSignKeyword_4(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:352:1: ( ( RULE_ID ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:353:1: ( RULE_ID )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:353:1: ( RULE_ID )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:354:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getRegexRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRegex657); 

            		createLeafNode(grammarAccess.getRegexAccess().getTapeTapeCrossReference_5_0(), "tape"); 
            	

            }


            }

            match(input,20,FOLLOW_20_in_ruleRegex667); 

                    createLeafNode(grammarAccess.getRegexAccess().getLeftCurlyBracketKeyword_6(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:370:1: ( (lv_expression_8_0= ruleExpression ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:371:1: (lv_expression_8_0= ruleExpression )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:371:1: (lv_expression_8_0= ruleExpression )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:372:3: lv_expression_8_0= ruleExpression
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getRegexAccess().getExpressionExpressionParserRuleCall_7_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleExpression_in_ruleRegex688);
            lv_expression_8_0=ruleExpression();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getRegexRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"expression",
            	        		lv_expression_8_0, 
            	        		"Expression", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,21,FOLLOW_21_in_ruleRegex698); 

                    createLeafNode(grammarAccess.getRegexAccess().getRightCurlyBracketKeyword_8(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleRegex


    // $ANTLR start entryRuleExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:406:1: entryRuleExpression returns [EObject current=null] : iv_ruleExpression= ruleExpression EOF ;
    public final EObject entryRuleExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExpression = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:407:2: (iv_ruleExpression= ruleExpression EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:408:2: iv_ruleExpression= ruleExpression EOF
            {
             currentNode = createCompositeNode(grammarAccess.getExpressionRule(), currentNode); 
            pushFollow(FOLLOW_ruleExpression_in_entryRuleExpression734);
            iv_ruleExpression=ruleExpression();
            _fsp--;

             current =iv_ruleExpression; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleExpression744); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleExpression


    // $ANTLR start ruleExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:415:1: ruleExpression returns [EObject current=null] : this_ANDExpression_0= ruleANDExpression ;
    public final EObject ruleExpression() throws RecognitionException {
        EObject current = null;

        EObject this_ANDExpression_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:420:6: (this_ANDExpression_0= ruleANDExpression )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:422:5: this_ANDExpression_0= ruleANDExpression
            {
             
                    currentNode=createCompositeNode(grammarAccess.getExpressionAccess().getANDExpressionParserRuleCall(), currentNode); 
                
            pushFollow(FOLLOW_ruleANDExpression_in_ruleExpression790);
            this_ANDExpression_0=ruleANDExpression();
            _fsp--;

             
                    current = this_ANDExpression_0; 
                    currentNode = currentNode.getParent();
                

            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleExpression


    // $ANTLR start entryRuleANDExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:438:1: entryRuleANDExpression returns [EObject current=null] : iv_ruleANDExpression= ruleANDExpression EOF ;
    public final EObject entryRuleANDExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleANDExpression = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:439:2: (iv_ruleANDExpression= ruleANDExpression EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:440:2: iv_ruleANDExpression= ruleANDExpression EOF
            {
             currentNode = createCompositeNode(grammarAccess.getANDExpressionRule(), currentNode); 
            pushFollow(FOLLOW_ruleANDExpression_in_entryRuleANDExpression824);
            iv_ruleANDExpression=ruleANDExpression();
            _fsp--;

             current =iv_ruleANDExpression; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleANDExpression834); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleANDExpression


    // $ANTLR start ruleANDExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:447:1: ruleANDExpression returns [EObject current=null] : (this_ORExpression_0= ruleORExpression ( () '&' ( (lv_right_3_0= ruleORExpression ) ) )* ) ;
    public final EObject ruleANDExpression() throws RecognitionException {
        EObject current = null;

        EObject this_ORExpression_0 = null;

        EObject lv_right_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:452:6: ( (this_ORExpression_0= ruleORExpression ( () '&' ( (lv_right_3_0= ruleORExpression ) ) )* ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:453:1: (this_ORExpression_0= ruleORExpression ( () '&' ( (lv_right_3_0= ruleORExpression ) ) )* )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:453:1: (this_ORExpression_0= ruleORExpression ( () '&' ( (lv_right_3_0= ruleORExpression ) ) )* )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:454:5: this_ORExpression_0= ruleORExpression ( () '&' ( (lv_right_3_0= ruleORExpression ) ) )*
            {
             
                    currentNode=createCompositeNode(grammarAccess.getANDExpressionAccess().getORExpressionParserRuleCall_0(), currentNode); 
                
            pushFollow(FOLLOW_ruleORExpression_in_ruleANDExpression881);
            this_ORExpression_0=ruleORExpression();
            _fsp--;

             
                    current = this_ORExpression_0; 
                    currentNode = currentNode.getParent();
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:462:1: ( () '&' ( (lv_right_3_0= ruleORExpression ) ) )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==22) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:462:2: () '&' ( (lv_right_3_0= ruleORExpression ) )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:462:2: ()
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:463:5: 
            	    {
            	     
            	            temp=factory.create(grammarAccess.getANDExpressionAccess().getANDExpressionLeftAction_1_0().getType().getClassifier());
            	            try {
            	            	factory.set(temp, "left", current, null /*ParserRule*/, currentNode);
            	            } catch(ValueConverterException vce) {
            	            	handleValueConverterException(vce);
            	            }
            	            current = temp; 
            	            temp = null;
            	            CompositeNode newNode = createCompositeNode(grammarAccess.getANDExpressionAccess().getANDExpressionLeftAction_1_0(), currentNode.getParent());
            	        newNode.getChildren().add(currentNode);
            	        moveLookaheadInfo(currentNode, newNode);
            	        currentNode = newNode; 
            	            associateNodeWithAstElement(currentNode, current); 
            	        

            	    }

            	    match(input,22,FOLLOW_22_in_ruleANDExpression900); 

            	            createLeafNode(grammarAccess.getANDExpressionAccess().getAmpersandKeyword_1_1(), null); 
            	        
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:482:1: ( (lv_right_3_0= ruleORExpression ) )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:483:1: (lv_right_3_0= ruleORExpression )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:483:1: (lv_right_3_0= ruleORExpression )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:484:3: lv_right_3_0= ruleORExpression
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getANDExpressionAccess().getRightORExpressionParserRuleCall_1_2_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleORExpression_in_ruleANDExpression921);
            	    lv_right_3_0=ruleORExpression();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getANDExpressionRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		set(
            	    	       			current, 
            	    	       			"right",
            	    	        		lv_right_3_0, 
            	    	        		"ORExpression", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleANDExpression


    // $ANTLR start entryRuleORExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:514:1: entryRuleORExpression returns [EObject current=null] : iv_ruleORExpression= ruleORExpression EOF ;
    public final EObject entryRuleORExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleORExpression = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:515:2: (iv_ruleORExpression= ruleORExpression EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:516:2: iv_ruleORExpression= ruleORExpression EOF
            {
             currentNode = createCompositeNode(grammarAccess.getORExpressionRule(), currentNode); 
            pushFollow(FOLLOW_ruleORExpression_in_entryRuleORExpression959);
            iv_ruleORExpression=ruleORExpression();
            _fsp--;

             current =iv_ruleORExpression; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleORExpression969); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleORExpression


    // $ANTLR start ruleORExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:523:1: ruleORExpression returns [EObject current=null] : (this_KleeneExpression_0= ruleKleeneExpression ( () '|' ( (lv_right_3_0= ruleKleeneExpression ) ) )* ) ;
    public final EObject ruleORExpression() throws RecognitionException {
        EObject current = null;

        EObject this_KleeneExpression_0 = null;

        EObject lv_right_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:528:6: ( (this_KleeneExpression_0= ruleKleeneExpression ( () '|' ( (lv_right_3_0= ruleKleeneExpression ) ) )* ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:529:1: (this_KleeneExpression_0= ruleKleeneExpression ( () '|' ( (lv_right_3_0= ruleKleeneExpression ) ) )* )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:529:1: (this_KleeneExpression_0= ruleKleeneExpression ( () '|' ( (lv_right_3_0= ruleKleeneExpression ) ) )* )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:530:5: this_KleeneExpression_0= ruleKleeneExpression ( () '|' ( (lv_right_3_0= ruleKleeneExpression ) ) )*
            {
             
                    currentNode=createCompositeNode(grammarAccess.getORExpressionAccess().getKleeneExpressionParserRuleCall_0(), currentNode); 
                
            pushFollow(FOLLOW_ruleKleeneExpression_in_ruleORExpression1016);
            this_KleeneExpression_0=ruleKleeneExpression();
            _fsp--;

             
                    current = this_KleeneExpression_0; 
                    currentNode = currentNode.getParent();
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:538:1: ( () '|' ( (lv_right_3_0= ruleKleeneExpression ) ) )*
            loop7:
            do {
                int alt7=2;
                int LA7_0 = input.LA(1);

                if ( (LA7_0==23) ) {
                    alt7=1;
                }


                switch (alt7) {
            	case 1 :
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:538:2: () '|' ( (lv_right_3_0= ruleKleeneExpression ) )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:538:2: ()
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:539:5: 
            	    {
            	     
            	            temp=factory.create(grammarAccess.getORExpressionAccess().getORExpressionLeftAction_1_0().getType().getClassifier());
            	            try {
            	            	factory.set(temp, "left", current, null /*ParserRule*/, currentNode);
            	            } catch(ValueConverterException vce) {
            	            	handleValueConverterException(vce);
            	            }
            	            current = temp; 
            	            temp = null;
            	            CompositeNode newNode = createCompositeNode(grammarAccess.getORExpressionAccess().getORExpressionLeftAction_1_0(), currentNode.getParent());
            	        newNode.getChildren().add(currentNode);
            	        moveLookaheadInfo(currentNode, newNode);
            	        currentNode = newNode; 
            	            associateNodeWithAstElement(currentNode, current); 
            	        

            	    }

            	    match(input,23,FOLLOW_23_in_ruleORExpression1035); 

            	            createLeafNode(grammarAccess.getORExpressionAccess().getVerticalLineKeyword_1_1(), null); 
            	        
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:558:1: ( (lv_right_3_0= ruleKleeneExpression ) )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:559:1: (lv_right_3_0= ruleKleeneExpression )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:559:1: (lv_right_3_0= ruleKleeneExpression )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:560:3: lv_right_3_0= ruleKleeneExpression
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getORExpressionAccess().getRightKleeneExpressionParserRuleCall_1_2_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleKleeneExpression_in_ruleORExpression1056);
            	    lv_right_3_0=ruleKleeneExpression();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getORExpressionRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		set(
            	    	       			current, 
            	    	       			"right",
            	    	        		lv_right_3_0, 
            	    	        		"KleeneExpression", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop7;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleORExpression


    // $ANTLR start entryRuleKleeneExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:590:1: entryRuleKleeneExpression returns [EObject current=null] : iv_ruleKleeneExpression= ruleKleeneExpression EOF ;
    public final EObject entryRuleKleeneExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleKleeneExpression = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:591:2: (iv_ruleKleeneExpression= ruleKleeneExpression EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:592:2: iv_ruleKleeneExpression= ruleKleeneExpression EOF
            {
             currentNode = createCompositeNode(grammarAccess.getKleeneExpressionRule(), currentNode); 
            pushFollow(FOLLOW_ruleKleeneExpression_in_entryRuleKleeneExpression1094);
            iv_ruleKleeneExpression=ruleKleeneExpression();
            _fsp--;

             current =iv_ruleKleeneExpression; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleKleeneExpression1104); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleKleeneExpression


    // $ANTLR start ruleKleeneExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:599:1: ruleKleeneExpression returns [EObject current=null] : (this_PrimaryExpression_0= rulePrimaryExpression ( () '*' )? ) ;
    public final EObject ruleKleeneExpression() throws RecognitionException {
        EObject current = null;

        EObject this_PrimaryExpression_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:604:6: ( (this_PrimaryExpression_0= rulePrimaryExpression ( () '*' )? ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:605:1: (this_PrimaryExpression_0= rulePrimaryExpression ( () '*' )? )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:605:1: (this_PrimaryExpression_0= rulePrimaryExpression ( () '*' )? )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:606:5: this_PrimaryExpression_0= rulePrimaryExpression ( () '*' )?
            {
             
                    currentNode=createCompositeNode(grammarAccess.getKleeneExpressionAccess().getPrimaryExpressionParserRuleCall_0(), currentNode); 
                
            pushFollow(FOLLOW_rulePrimaryExpression_in_ruleKleeneExpression1151);
            this_PrimaryExpression_0=rulePrimaryExpression();
            _fsp--;

             
                    current = this_PrimaryExpression_0; 
                    currentNode = currentNode.getParent();
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:614:1: ( () '*' )?
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==24) ) {
                alt8=1;
            }
            switch (alt8) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:614:2: () '*'
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:614:2: ()
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:615:5: 
                    {
                     
                            temp=factory.create(grammarAccess.getKleeneExpressionAccess().getKleeneExpressionChildExpressionAction_1_0().getType().getClassifier());
                            try {
                            	factory.set(temp, "childExpression", current, null /*ParserRule*/, currentNode);
                            } catch(ValueConverterException vce) {
                            	handleValueConverterException(vce);
                            }
                            current = temp; 
                            temp = null;
                            CompositeNode newNode = createCompositeNode(grammarAccess.getKleeneExpressionAccess().getKleeneExpressionChildExpressionAction_1_0(), currentNode.getParent());
                        newNode.getChildren().add(currentNode);
                        moveLookaheadInfo(currentNode, newNode);
                        currentNode = newNode; 
                            associateNodeWithAstElement(currentNode, current); 
                        

                    }

                    match(input,24,FOLLOW_24_in_ruleKleeneExpression1170); 

                            createLeafNode(grammarAccess.getKleeneExpressionAccess().getAsteriskKeyword_1_1(), null); 
                        

                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleKleeneExpression


    // $ANTLR start entryRulePrimaryExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:642:1: entryRulePrimaryExpression returns [EObject current=null] : iv_rulePrimaryExpression= rulePrimaryExpression EOF ;
    public final EObject entryRulePrimaryExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePrimaryExpression = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:643:2: (iv_rulePrimaryExpression= rulePrimaryExpression EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:644:2: iv_rulePrimaryExpression= rulePrimaryExpression EOF
            {
             currentNode = createCompositeNode(grammarAccess.getPrimaryExpressionRule(), currentNode); 
            pushFollow(FOLLOW_rulePrimaryExpression_in_entryRulePrimaryExpression1208);
            iv_rulePrimaryExpression=rulePrimaryExpression();
            _fsp--;

             current =iv_rulePrimaryExpression; 
            match(input,EOF,FOLLOW_EOF_in_entryRulePrimaryExpression1218); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRulePrimaryExpression


    // $ANTLR start rulePrimaryExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:651:1: rulePrimaryExpression returns [EObject current=null] : ( ( '(' this_Expression_1= ruleExpression ')' ) | this_StringExpression_3= ruleStringExpression ) ;
    public final EObject rulePrimaryExpression() throws RecognitionException {
        EObject current = null;

        EObject this_Expression_1 = null;

        EObject this_StringExpression_3 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:656:6: ( ( ( '(' this_Expression_1= ruleExpression ')' ) | this_StringExpression_3= ruleStringExpression ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:657:1: ( ( '(' this_Expression_1= ruleExpression ')' ) | this_StringExpression_3= ruleStringExpression )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:657:1: ( ( '(' this_Expression_1= ruleExpression ')' ) | this_StringExpression_3= ruleStringExpression )
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0==25) ) {
                alt9=1;
            }
            else if ( (LA9_0==RULE_STRING) ) {
                alt9=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("657:1: ( ( '(' this_Expression_1= ruleExpression ')' ) | this_StringExpression_3= ruleStringExpression )", 9, 0, input);

                throw nvae;
            }
            switch (alt9) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:657:2: ( '(' this_Expression_1= ruleExpression ')' )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:657:2: ( '(' this_Expression_1= ruleExpression ')' )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:657:4: '(' this_Expression_1= ruleExpression ')'
                    {
                    match(input,25,FOLLOW_25_in_rulePrimaryExpression1254); 

                            createLeafNode(grammarAccess.getPrimaryExpressionAccess().getLeftParenthesisKeyword_0_0(), null); 
                        
                     
                            currentNode=createCompositeNode(grammarAccess.getPrimaryExpressionAccess().getExpressionParserRuleCall_0_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleExpression_in_rulePrimaryExpression1276);
                    this_Expression_1=ruleExpression();
                    _fsp--;

                     
                            current = this_Expression_1; 
                            currentNode = currentNode.getParent();
                        
                    match(input,26,FOLLOW_26_in_rulePrimaryExpression1285); 

                            createLeafNode(grammarAccess.getPrimaryExpressionAccess().getRightParenthesisKeyword_0_2(), null); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:676:5: this_StringExpression_3= ruleStringExpression
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getPrimaryExpressionAccess().getStringExpressionParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleStringExpression_in_rulePrimaryExpression1314);
                    this_StringExpression_3=ruleStringExpression();
                    _fsp--;

                     
                            current = this_StringExpression_3; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end rulePrimaryExpression


    // $ANTLR start entryRuleStringExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:692:1: entryRuleStringExpression returns [EObject current=null] : iv_ruleStringExpression= ruleStringExpression EOF ;
    public final EObject entryRuleStringExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStringExpression = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:693:2: (iv_ruleStringExpression= ruleStringExpression EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:694:2: iv_ruleStringExpression= ruleStringExpression EOF
            {
             currentNode = createCompositeNode(grammarAccess.getStringExpressionRule(), currentNode); 
            pushFollow(FOLLOW_ruleStringExpression_in_entryRuleStringExpression1349);
            iv_ruleStringExpression=ruleStringExpression();
            _fsp--;

             current =iv_ruleStringExpression; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleStringExpression1359); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleStringExpression


    // $ANTLR start ruleStringExpression
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:701:1: ruleStringExpression returns [EObject current=null] : ( (lv_input_0_0= RULE_STRING ) ) ;
    public final EObject ruleStringExpression() throws RecognitionException {
        EObject current = null;

        Token lv_input_0_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:706:6: ( ( (lv_input_0_0= RULE_STRING ) ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:707:1: ( (lv_input_0_0= RULE_STRING ) )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:707:1: ( (lv_input_0_0= RULE_STRING ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:708:1: (lv_input_0_0= RULE_STRING )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:708:1: (lv_input_0_0= RULE_STRING )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:709:3: lv_input_0_0= RULE_STRING
            {
            lv_input_0_0=(Token)input.LT(1);
            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleStringExpression1400); 

            			createLeafNode(grammarAccess.getStringExpressionAccess().getInputSTRINGTerminalRuleCall_0(), "input"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getStringExpressionRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"input",
            	        		lv_input_0_0, 
            	        		"STRING", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleStringExpression


    // $ANTLR start entryRuleGrammar
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:739:1: entryRuleGrammar returns [EObject current=null] : iv_ruleGrammar= ruleGrammar EOF ;
    public final EObject entryRuleGrammar() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGrammar = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:740:2: (iv_ruleGrammar= ruleGrammar EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:741:2: iv_ruleGrammar= ruleGrammar EOF
            {
             currentNode = createCompositeNode(grammarAccess.getGrammarRule(), currentNode); 
            pushFollow(FOLLOW_ruleGrammar_in_entryRuleGrammar1440);
            iv_ruleGrammar=ruleGrammar();
            _fsp--;

             current =iv_ruleGrammar; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleGrammar1450); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleGrammar


    // $ANTLR start ruleGrammar
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:748:1: ruleGrammar returns [EObject current=null] : ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'grammar' '{' '}' ) ;
    public final EObject ruleGrammar() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:753:6: ( ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'grammar' '{' '}' ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:754:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'grammar' '{' '}' )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:754:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'grammar' '{' '}' )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:754:2: () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'grammar' '{' '}'
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:754:2: ()
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:755:5: 
            {
             
                    temp=factory.create(grammarAccess.getGrammarAccess().getGrammarAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getGrammarAccess().getGrammarAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:765:2: ( ( (lv_name_1_0= RULE_ID ) ) ':' )?
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( (LA10_0==RULE_ID) ) {
                alt10=1;
            }
            switch (alt10) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:765:3: ( (lv_name_1_0= RULE_ID ) ) ':'
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:765:3: ( (lv_name_1_0= RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:766:1: (lv_name_1_0= RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:766:1: (lv_name_1_0= RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:767:3: lv_name_1_0= RULE_ID
                    {
                    lv_name_1_0=(Token)input.LT(1);
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleGrammar1502); 

                    			createLeafNode(grammarAccess.getGrammarAccess().getNameIDTerminalRuleCall_1_0_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getGrammarRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_1_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,16,FOLLOW_16_in_ruleGrammar1517); 

                            createLeafNode(grammarAccess.getGrammarAccess().getColonKeyword_1_1(), null); 
                        

                    }
                    break;

            }

            match(input,27,FOLLOW_27_in_ruleGrammar1529); 

                    createLeafNode(grammarAccess.getGrammarAccess().getGrammarKeyword_2(), null); 
                
            match(input,20,FOLLOW_20_in_ruleGrammar1539); 

                    createLeafNode(grammarAccess.getGrammarAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            match(input,21,FOLLOW_21_in_ruleGrammar1549); 

                    createLeafNode(grammarAccess.getGrammarAccess().getRightCurlyBracketKeyword_4(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleGrammar


    // $ANTLR start entryRuleTransitions
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:813:1: entryRuleTransitions returns [EObject current=null] : iv_ruleTransitions= ruleTransitions EOF ;
    public final EObject entryRuleTransitions() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTransitions = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:814:2: (iv_ruleTransitions= ruleTransitions EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:815:2: iv_ruleTransitions= ruleTransitions EOF
            {
             currentNode = createCompositeNode(grammarAccess.getTransitionsRule(), currentNode); 
            pushFollow(FOLLOW_ruleTransitions_in_entryRuleTransitions1585);
            iv_ruleTransitions=ruleTransitions();
            _fsp--;

             current =iv_ruleTransitions; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTransitions1595); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleTransitions


    // $ANTLR start ruleTransitions
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:822:1: ruleTransitions returns [EObject current=null] : ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'transitions' ( ( ( ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )* ) ) ) '{' ( (lv_transitions_12_0= ruleTransition ) )* '}' ) ;
    public final EObject ruleTransitions() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_transitions_12_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:827:6: ( ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'transitions' ( ( ( ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )* ) ) ) '{' ( (lv_transitions_12_0= ruleTransition ) )* '}' ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:828:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'transitions' ( ( ( ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )* ) ) ) '{' ( (lv_transitions_12_0= ruleTransition ) )* '}' )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:828:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'transitions' ( ( ( ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )* ) ) ) '{' ( (lv_transitions_12_0= ruleTransition ) )* '}' )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:828:2: () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'transitions' ( ( ( ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )* ) ) ) '{' ( (lv_transitions_12_0= ruleTransition ) )* '}'
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:828:2: ()
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:829:5: 
            {
             
                    temp=factory.create(grammarAccess.getTransitionsAccess().getTransitionsTableAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getTransitionsAccess().getTransitionsTableAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:839:2: ( ( (lv_name_1_0= RULE_ID ) ) ':' )?
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==RULE_ID) ) {
                alt11=1;
            }
            switch (alt11) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:839:3: ( (lv_name_1_0= RULE_ID ) ) ':'
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:839:3: ( (lv_name_1_0= RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:840:1: (lv_name_1_0= RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:840:1: (lv_name_1_0= RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:841:3: lv_name_1_0= RULE_ID
                    {
                    lv_name_1_0=(Token)input.LT(1);
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTransitions1647); 

                    			createLeafNode(grammarAccess.getTransitionsAccess().getNameIDTerminalRuleCall_1_0_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getTransitionsRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_1_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,16,FOLLOW_16_in_ruleTransitions1662); 

                            createLeafNode(grammarAccess.getTransitionsAccess().getColonKeyword_1_1(), null); 
                        

                    }
                    break;

            }

            match(input,28,FOLLOW_28_in_ruleTransitions1674); 

                    createLeafNode(grammarAccess.getTransitionsAccess().getTransitionsKeyword_2(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:871:1: ( ( ( ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )* ) ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:873:1: ( ( ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )* ) )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:873:1: ( ( ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )* ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:874:2: ( ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )* )
            {
             
            	  getUnorderedGroupHelper().enter(grammarAccess.getTransitionsAccess().getUnorderedGroup_3());
            	
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:877:2: ( ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )* )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:878:3: ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )*
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:878:3: ( ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) ) | ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) ) )*
            loop12:
            do {
                int alt12=3;
                int LA12_0 = input.LA(1);

                if ( LA12_0 ==18 && getUnorderedGroupHelper().canSelect(grammarAccess.getTransitionsAccess().getUnorderedGroup_3(), 0) ) {
                    alt12=1;
                }
                else if ( LA12_0 ==29 && getUnorderedGroupHelper().canSelect(grammarAccess.getTransitionsAccess().getUnorderedGroup_3(), 1) ) {
                    alt12=2;
                }


                switch (alt12) {
            	case 1 :
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:880:4: ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:880:4: ({...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) ) )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:881:5: {...}? => ( ( 'tape' '=' ( ( RULE_ID ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getTransitionsAccess().getUnorderedGroup_3(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleTransitions", "getUnorderedGroupHelper().canSelect(grammarAccess.getTransitionsAccess().getUnorderedGroup_3(), 0)");
            	    }
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:881:108: ( ( 'tape' '=' ( ( RULE_ID ) ) ) )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:882:6: ( 'tape' '=' ( ( RULE_ID ) ) )
            	    {
            	     
            	    	 				  getUnorderedGroupHelper().select(grammarAccess.getTransitionsAccess().getUnorderedGroup_3(), 0);
            	    	 				
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:885:6: ( 'tape' '=' ( ( RULE_ID ) ) )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:885:8: 'tape' '=' ( ( RULE_ID ) )
            	    {
            	    match(input,18,FOLLOW_18_in_ruleTransitions1727); 

            	            createLeafNode(grammarAccess.getTransitionsAccess().getTapeKeyword_3_0_0(), null); 
            	        
            	    match(input,19,FOLLOW_19_in_ruleTransitions1737); 

            	            createLeafNode(grammarAccess.getTransitionsAccess().getEqualsSignKeyword_3_0_1(), null); 
            	        
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:893:1: ( ( RULE_ID ) )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:894:1: ( RULE_ID )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:894:1: ( RULE_ID )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:895:3: RULE_ID
            	    {

            	    			if (current==null) {
            	    	            current = factory.create(grammarAccess.getTransitionsRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode, current);
            	    	        }
            	            
            	    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTransitions1755); 

            	    		createLeafNode(grammarAccess.getTransitionsAccess().getTapeTapeCrossReference_3_0_2_0(), "tape"); 
            	    	

            	    }


            	    }


            	    }

            	     
            	    	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getTransitionsAccess().getUnorderedGroup_3());
            	    	 				

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:914:4: ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:914:4: ({...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) ) )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:915:5: {...}? => ( ( 'states' '=' ( ( RULE_ID ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getTransitionsAccess().getUnorderedGroup_3(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleTransitions", "getUnorderedGroupHelper().canSelect(grammarAccess.getTransitionsAccess().getUnorderedGroup_3(), 1)");
            	    }
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:915:108: ( ( 'states' '=' ( ( RULE_ID ) ) ) )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:916:6: ( 'states' '=' ( ( RULE_ID ) ) )
            	    {
            	     
            	    	 				  getUnorderedGroupHelper().select(grammarAccess.getTransitionsAccess().getUnorderedGroup_3(), 1);
            	    	 				
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:919:6: ( 'states' '=' ( ( RULE_ID ) ) )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:919:8: 'states' '=' ( ( RULE_ID ) )
            	    {
            	    match(input,29,FOLLOW_29_in_ruleTransitions1817); 

            	            createLeafNode(grammarAccess.getTransitionsAccess().getStatesKeyword_3_1_0(), null); 
            	        
            	    match(input,19,FOLLOW_19_in_ruleTransitions1827); 

            	            createLeafNode(grammarAccess.getTransitionsAccess().getEqualsSignKeyword_3_1_1(), null); 
            	        
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:927:1: ( ( RULE_ID ) )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:928:1: ( RULE_ID )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:928:1: ( RULE_ID )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:929:3: RULE_ID
            	    {

            	    			if (current==null) {
            	    	            current = factory.create(grammarAccess.getTransitionsRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode, current);
            	    	        }
            	            
            	    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTransitions1845); 

            	    		createLeafNode(grammarAccess.getTransitionsAccess().getStatesStatesRegisterCrossReference_3_1_2_0(), "states"); 
            	    	

            	    }


            	    }


            	    }

            	     
            	    	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getTransitionsAccess().getUnorderedGroup_3());
            	    	 				

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop12;
                }
            } while (true);


            }


            }

             
            	  getUnorderedGroupHelper().leave(grammarAccess.getTransitionsAccess().getUnorderedGroup_3());
            	

            }

            match(input,20,FOLLOW_20_in_ruleTransitions1895); 

                    createLeafNode(grammarAccess.getTransitionsAccess().getLeftCurlyBracketKeyword_4(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:959:1: ( (lv_transitions_12_0= ruleTransition ) )*
            loop13:
            do {
                int alt13=2;
                int LA13_0 = input.LA(1);

                if ( (LA13_0==RULE_ID) ) {
                    alt13=1;
                }


                switch (alt13) {
            	case 1 :
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:960:1: (lv_transitions_12_0= ruleTransition )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:960:1: (lv_transitions_12_0= ruleTransition )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:961:3: lv_transitions_12_0= ruleTransition
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getTransitionsAccess().getTransitionsTransitionParserRuleCall_5_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleTransition_in_ruleTransitions1916);
            	    lv_transitions_12_0=ruleTransition();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getTransitionsRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"transitions",
            	    	        		lv_transitions_12_0, 
            	    	        		"Transition", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop13;
                }
            } while (true);

            match(input,21,FOLLOW_21_in_ruleTransitions1927); 

                    createLeafNode(grammarAccess.getTransitionsAccess().getRightCurlyBracketKeyword_6(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleTransitions


    // $ANTLR start entryRuleTransition
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:995:1: entryRuleTransition returns [EObject current=null] : iv_ruleTransition= ruleTransition EOF ;
    public final EObject entryRuleTransition() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTransition = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:996:2: (iv_ruleTransition= ruleTransition EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:997:2: iv_ruleTransition= ruleTransition EOF
            {
             currentNode = createCompositeNode(grammarAccess.getTransitionRule(), currentNode); 
            pushFollow(FOLLOW_ruleTransition_in_entryRuleTransition1963);
            iv_ruleTransition=ruleTransition();
            _fsp--;

             current =iv_ruleTransition; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTransition1973); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleTransition


    // $ANTLR start ruleTransition
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1004:1: ruleTransition returns [EObject current=null] : ( ( ( RULE_ID ) ) '->' ( ( RULE_ID ) ) ':' ( (lv_startInstructions_4_0= ruleInstruction ) ) ( ',' ( (lv_startInstructions_6_0= ruleInstruction ) ) )* ( '<>' ( (lv_endInstructions_8_0= ruleInstruction ) ) ( ',' ( (lv_endInstructions_10_0= ruleInstruction ) ) )* )? ) ;
    public final EObject ruleTransition() throws RecognitionException {
        EObject current = null;

        EObject lv_startInstructions_4_0 = null;

        EObject lv_startInstructions_6_0 = null;

        EObject lv_endInstructions_8_0 = null;

        EObject lv_endInstructions_10_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1009:6: ( ( ( ( RULE_ID ) ) '->' ( ( RULE_ID ) ) ':' ( (lv_startInstructions_4_0= ruleInstruction ) ) ( ',' ( (lv_startInstructions_6_0= ruleInstruction ) ) )* ( '<>' ( (lv_endInstructions_8_0= ruleInstruction ) ) ( ',' ( (lv_endInstructions_10_0= ruleInstruction ) ) )* )? ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1010:1: ( ( ( RULE_ID ) ) '->' ( ( RULE_ID ) ) ':' ( (lv_startInstructions_4_0= ruleInstruction ) ) ( ',' ( (lv_startInstructions_6_0= ruleInstruction ) ) )* ( '<>' ( (lv_endInstructions_8_0= ruleInstruction ) ) ( ',' ( (lv_endInstructions_10_0= ruleInstruction ) ) )* )? )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1010:1: ( ( ( RULE_ID ) ) '->' ( ( RULE_ID ) ) ':' ( (lv_startInstructions_4_0= ruleInstruction ) ) ( ',' ( (lv_startInstructions_6_0= ruleInstruction ) ) )* ( '<>' ( (lv_endInstructions_8_0= ruleInstruction ) ) ( ',' ( (lv_endInstructions_10_0= ruleInstruction ) ) )* )? )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1010:2: ( ( RULE_ID ) ) '->' ( ( RULE_ID ) ) ':' ( (lv_startInstructions_4_0= ruleInstruction ) ) ( ',' ( (lv_startInstructions_6_0= ruleInstruction ) ) )* ( '<>' ( (lv_endInstructions_8_0= ruleInstruction ) ) ( ',' ( (lv_endInstructions_10_0= ruleInstruction ) ) )* )?
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1010:2: ( ( RULE_ID ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1011:1: ( RULE_ID )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1011:1: ( RULE_ID )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1012:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getTransitionRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTransition2016); 

            		createLeafNode(grammarAccess.getTransitionAccess().getStartStateCrossReference_0_0(), "start"); 
            	

            }


            }

            match(input,30,FOLLOW_30_in_ruleTransition2026); 

                    createLeafNode(grammarAccess.getTransitionAccess().getHyphenMinusGreaterThanSignKeyword_1(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1028:1: ( ( RULE_ID ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1029:1: ( RULE_ID )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1029:1: ( RULE_ID )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1030:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getTransitionRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTransition2044); 

            		createLeafNode(grammarAccess.getTransitionAccess().getEndStateCrossReference_2_0(), "end"); 
            	

            }


            }

            match(input,16,FOLLOW_16_in_ruleTransition2054); 

                    createLeafNode(grammarAccess.getTransitionAccess().getColonKeyword_3(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1046:1: ( (lv_startInstructions_4_0= ruleInstruction ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1047:1: (lv_startInstructions_4_0= ruleInstruction )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1047:1: (lv_startInstructions_4_0= ruleInstruction )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1048:3: lv_startInstructions_4_0= ruleInstruction
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getTransitionAccess().getStartInstructionsInstructionParserRuleCall_4_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleInstruction_in_ruleTransition2075);
            lv_startInstructions_4_0=ruleInstruction();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getTransitionRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		add(
            	       			current, 
            	       			"startInstructions",
            	        		lv_startInstructions_4_0, 
            	        		"Instruction", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1070:2: ( ',' ( (lv_startInstructions_6_0= ruleInstruction ) ) )*
            loop14:
            do {
                int alt14=2;
                int LA14_0 = input.LA(1);

                if ( (LA14_0==31) ) {
                    alt14=1;
                }


                switch (alt14) {
            	case 1 :
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1070:4: ',' ( (lv_startInstructions_6_0= ruleInstruction ) )
            	    {
            	    match(input,31,FOLLOW_31_in_ruleTransition2086); 

            	            createLeafNode(grammarAccess.getTransitionAccess().getCommaKeyword_5_0(), null); 
            	        
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1074:1: ( (lv_startInstructions_6_0= ruleInstruction ) )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1075:1: (lv_startInstructions_6_0= ruleInstruction )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1075:1: (lv_startInstructions_6_0= ruleInstruction )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1076:3: lv_startInstructions_6_0= ruleInstruction
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getTransitionAccess().getStartInstructionsInstructionParserRuleCall_5_1_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleInstruction_in_ruleTransition2107);
            	    lv_startInstructions_6_0=ruleInstruction();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getTransitionRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"startInstructions",
            	    	        		lv_startInstructions_6_0, 
            	    	        		"Instruction", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop14;
                }
            } while (true);

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1098:4: ( '<>' ( (lv_endInstructions_8_0= ruleInstruction ) ) ( ',' ( (lv_endInstructions_10_0= ruleInstruction ) ) )* )?
            int alt16=2;
            int LA16_0 = input.LA(1);

            if ( (LA16_0==32) ) {
                alt16=1;
            }
            switch (alt16) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1098:6: '<>' ( (lv_endInstructions_8_0= ruleInstruction ) ) ( ',' ( (lv_endInstructions_10_0= ruleInstruction ) ) )*
                    {
                    match(input,32,FOLLOW_32_in_ruleTransition2120); 

                            createLeafNode(grammarAccess.getTransitionAccess().getLessThanSignGreaterThanSignKeyword_6_0(), null); 
                        
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1102:1: ( (lv_endInstructions_8_0= ruleInstruction ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1103:1: (lv_endInstructions_8_0= ruleInstruction )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1103:1: (lv_endInstructions_8_0= ruleInstruction )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1104:3: lv_endInstructions_8_0= ruleInstruction
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getTransitionAccess().getEndInstructionsInstructionParserRuleCall_6_1_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleInstruction_in_ruleTransition2141);
                    lv_endInstructions_8_0=ruleInstruction();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getTransitionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"endInstructions",
                    	        		lv_endInstructions_8_0, 
                    	        		"Instruction", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1126:2: ( ',' ( (lv_endInstructions_10_0= ruleInstruction ) ) )*
                    loop15:
                    do {
                        int alt15=2;
                        int LA15_0 = input.LA(1);

                        if ( (LA15_0==31) ) {
                            alt15=1;
                        }


                        switch (alt15) {
                    	case 1 :
                    	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1126:4: ',' ( (lv_endInstructions_10_0= ruleInstruction ) )
                    	    {
                    	    match(input,31,FOLLOW_31_in_ruleTransition2152); 

                    	            createLeafNode(grammarAccess.getTransitionAccess().getCommaKeyword_6_2_0(), null); 
                    	        
                    	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1130:1: ( (lv_endInstructions_10_0= ruleInstruction ) )
                    	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1131:1: (lv_endInstructions_10_0= ruleInstruction )
                    	    {
                    	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1131:1: (lv_endInstructions_10_0= ruleInstruction )
                    	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1132:3: lv_endInstructions_10_0= ruleInstruction
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getTransitionAccess().getEndInstructionsInstructionParserRuleCall_6_2_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FOLLOW_ruleInstruction_in_ruleTransition2173);
                    	    lv_endInstructions_10_0=ruleInstruction();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getTransitionRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"endInstructions",
                    	    	        		lv_endInstructions_10_0, 
                    	    	        		"Instruction", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop15;
                        }
                    } while (true);


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleTransition


    // $ANTLR start entryRuleInstruction
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1162:1: entryRuleInstruction returns [EObject current=null] : iv_ruleInstruction= ruleInstruction EOF ;
    public final EObject entryRuleInstruction() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInstruction = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1163:2: (iv_ruleInstruction= ruleInstruction EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1164:2: iv_ruleInstruction= ruleInstruction EOF
            {
             currentNode = createCompositeNode(grammarAccess.getInstructionRule(), currentNode); 
            pushFollow(FOLLOW_ruleInstruction_in_entryRuleInstruction2213);
            iv_ruleInstruction=ruleInstruction();
            _fsp--;

             current =iv_ruleInstruction; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleInstruction2223); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleInstruction


    // $ANTLR start ruleInstruction
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1171:1: ruleInstruction returns [EObject current=null] : this_TapeInstruction_0= ruleTapeInstruction ;
    public final EObject ruleInstruction() throws RecognitionException {
        EObject current = null;

        EObject this_TapeInstruction_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1176:6: (this_TapeInstruction_0= ruleTapeInstruction )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1178:5: this_TapeInstruction_0= ruleTapeInstruction
            {
             
                    currentNode=createCompositeNode(grammarAccess.getInstructionAccess().getTapeInstructionParserRuleCall(), currentNode); 
                
            pushFollow(FOLLOW_ruleTapeInstruction_in_ruleInstruction2269);
            this_TapeInstruction_0=ruleTapeInstruction();
            _fsp--;

             
                    current = this_TapeInstruction_0; 
                    currentNode = currentNode.getParent();
                

            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleInstruction


    // $ANTLR start entryRuleTapeInstruction
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1194:1: entryRuleTapeInstruction returns [EObject current=null] : iv_ruleTapeInstruction= ruleTapeInstruction EOF ;
    public final EObject entryRuleTapeInstruction() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTapeInstruction = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1195:2: (iv_ruleTapeInstruction= ruleTapeInstruction EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1196:2: iv_ruleTapeInstruction= ruleTapeInstruction EOF
            {
             currentNode = createCompositeNode(grammarAccess.getTapeInstructionRule(), currentNode); 
            pushFollow(FOLLOW_ruleTapeInstruction_in_entryRuleTapeInstruction2303);
            iv_ruleTapeInstruction=ruleTapeInstruction();
            _fsp--;

             current =iv_ruleTapeInstruction; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTapeInstruction2313); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleTapeInstruction


    // $ANTLR start ruleTapeInstruction
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1203:1: ruleTapeInstruction returns [EObject current=null] : (this_ReadFromTape_0= ruleReadFromTape | this_WriteToTape_1= ruleWriteToTape | this_MoveTapeLeft_2= ruleMoveTapeLeft | this_MoveTapeRight_3= ruleMoveTapeRight ) ;
    public final EObject ruleTapeInstruction() throws RecognitionException {
        EObject current = null;

        EObject this_ReadFromTape_0 = null;

        EObject this_WriteToTape_1 = null;

        EObject this_MoveTapeLeft_2 = null;

        EObject this_MoveTapeRight_3 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1208:6: ( (this_ReadFromTape_0= ruleReadFromTape | this_WriteToTape_1= ruleWriteToTape | this_MoveTapeLeft_2= ruleMoveTapeLeft | this_MoveTapeRight_3= ruleMoveTapeRight ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1209:1: (this_ReadFromTape_0= ruleReadFromTape | this_WriteToTape_1= ruleWriteToTape | this_MoveTapeLeft_2= ruleMoveTapeLeft | this_MoveTapeRight_3= ruleMoveTapeRight )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1209:1: (this_ReadFromTape_0= ruleReadFromTape | this_WriteToTape_1= ruleWriteToTape | this_MoveTapeLeft_2= ruleMoveTapeLeft | this_MoveTapeRight_3= ruleMoveTapeRight )
            int alt17=4;
            switch ( input.LA(1) ) {
            case RULE_CHAR:
            case RULE_EPS:
            case 33:
                {
                alt17=1;
                }
                break;
            case 35:
                {
                alt17=2;
                }
                break;
            case 36:
                {
                alt17=3;
                }
                break;
            case 37:
                {
                alt17=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("1209:1: (this_ReadFromTape_0= ruleReadFromTape | this_WriteToTape_1= ruleWriteToTape | this_MoveTapeLeft_2= ruleMoveTapeLeft | this_MoveTapeRight_3= ruleMoveTapeRight )", 17, 0, input);

                throw nvae;
            }

            switch (alt17) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1210:5: this_ReadFromTape_0= ruleReadFromTape
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getTapeInstructionAccess().getReadFromTapeParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleReadFromTape_in_ruleTapeInstruction2360);
                    this_ReadFromTape_0=ruleReadFromTape();
                    _fsp--;

                     
                            current = this_ReadFromTape_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1220:5: this_WriteToTape_1= ruleWriteToTape
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getTapeInstructionAccess().getWriteToTapeParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleWriteToTape_in_ruleTapeInstruction2387);
                    this_WriteToTape_1=ruleWriteToTape();
                    _fsp--;

                     
                            current = this_WriteToTape_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 3 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1230:5: this_MoveTapeLeft_2= ruleMoveTapeLeft
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getTapeInstructionAccess().getMoveTapeLeftParserRuleCall_2(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleMoveTapeLeft_in_ruleTapeInstruction2414);
                    this_MoveTapeLeft_2=ruleMoveTapeLeft();
                    _fsp--;

                     
                            current = this_MoveTapeLeft_2; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 4 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1240:5: this_MoveTapeRight_3= ruleMoveTapeRight
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getTapeInstructionAccess().getMoveTapeRightParserRuleCall_3(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleMoveTapeRight_in_ruleTapeInstruction2441);
                    this_MoveTapeRight_3=ruleMoveTapeRight();
                    _fsp--;

                     
                            current = this_MoveTapeRight_3; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleTapeInstruction


    // $ANTLR start entryRuleReadFromTape
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1256:1: entryRuleReadFromTape returns [EObject current=null] : iv_ruleReadFromTape= ruleReadFromTape EOF ;
    public final EObject entryRuleReadFromTape() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleReadFromTape = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1257:2: (iv_ruleReadFromTape= ruleReadFromTape EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1258:2: iv_ruleReadFromTape= ruleReadFromTape EOF
            {
             currentNode = createCompositeNode(grammarAccess.getReadFromTapeRule(), currentNode); 
            pushFollow(FOLLOW_ruleReadFromTape_in_entryRuleReadFromTape2476);
            iv_ruleReadFromTape=ruleReadFromTape();
            _fsp--;

             current =iv_ruleReadFromTape; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleReadFromTape2486); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleReadFromTape


    // $ANTLR start ruleReadFromTape
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1265:1: ruleReadFromTape returns [EObject current=null] : ( ( 'read' )? ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) ) ( '<-' ( ( RULE_ID ) ) )? ) ;
    public final EObject ruleReadFromTape() throws RecognitionException {
        EObject current = null;

        Token lv_symbol_1_1=null;
        Token lv_symbol_1_2=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1270:6: ( ( ( 'read' )? ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) ) ( '<-' ( ( RULE_ID ) ) )? ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1271:1: ( ( 'read' )? ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) ) ( '<-' ( ( RULE_ID ) ) )? )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1271:1: ( ( 'read' )? ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) ) ( '<-' ( ( RULE_ID ) ) )? )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1271:2: ( 'read' )? ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) ) ( '<-' ( ( RULE_ID ) ) )?
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1271:2: ( 'read' )?
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==33) ) {
                alt18=1;
            }
            switch (alt18) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1271:4: 'read'
                    {
                    match(input,33,FOLLOW_33_in_ruleReadFromTape2522); 

                            createLeafNode(grammarAccess.getReadFromTapeAccess().getReadKeyword_0(), null); 
                        

                    }
                    break;

            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1275:3: ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1276:1: ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1276:1: ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1277:1: (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1277:1: (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS )
            int alt19=2;
            int LA19_0 = input.LA(1);

            if ( (LA19_0==RULE_CHAR) ) {
                alt19=1;
            }
            else if ( (LA19_0==RULE_EPS) ) {
                alt19=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("1277:1: (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS )", 19, 0, input);

                throw nvae;
            }
            switch (alt19) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1278:3: lv_symbol_1_1= RULE_CHAR
                    {
                    lv_symbol_1_1=(Token)input.LT(1);
                    match(input,RULE_CHAR,FOLLOW_RULE_CHAR_in_ruleReadFromTape2543); 

                    			createLeafNode(grammarAccess.getReadFromTapeAccess().getSymbolCHARTerminalRuleCall_1_0_0(), "symbol"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getReadFromTapeRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"symbol",
                    	        		lv_symbol_1_1, 
                    	        		"CHAR", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }
                    break;
                case 2 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1299:8: lv_symbol_1_2= RULE_EPS
                    {
                    lv_symbol_1_2=(Token)input.LT(1);
                    match(input,RULE_EPS,FOLLOW_RULE_EPS_in_ruleReadFromTape2563); 

                    			createLeafNode(grammarAccess.getReadFromTapeAccess().getSymbolEPSTerminalRuleCall_1_0_1(), "symbol"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getReadFromTapeRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"symbol",
                    	        		lv_symbol_1_2, 
                    	        		"EPS", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }
                    break;

            }


            }


            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1323:2: ( '<-' ( ( RULE_ID ) ) )?
            int alt20=2;
            int LA20_0 = input.LA(1);

            if ( (LA20_0==34) ) {
                alt20=1;
            }
            switch (alt20) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1323:4: '<-' ( ( RULE_ID ) )
                    {
                    match(input,34,FOLLOW_34_in_ruleReadFromTape2582); 

                            createLeafNode(grammarAccess.getReadFromTapeAccess().getLessThanSignHyphenMinusKeyword_2_0(), null); 
                        
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1327:1: ( ( RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1328:1: ( RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1328:1: ( RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1329:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getReadFromTapeRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleReadFromTape2600); 

                    		createLeafNode(grammarAccess.getReadFromTapeAccess().getTapeTapeCrossReference_2_1_0(), "tape"); 
                    	

                    }


                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleReadFromTape


    // $ANTLR start entryRuleWriteToTape
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1349:1: entryRuleWriteToTape returns [EObject current=null] : iv_ruleWriteToTape= ruleWriteToTape EOF ;
    public final EObject entryRuleWriteToTape() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleWriteToTape = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1350:2: (iv_ruleWriteToTape= ruleWriteToTape EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1351:2: iv_ruleWriteToTape= ruleWriteToTape EOF
            {
             currentNode = createCompositeNode(grammarAccess.getWriteToTapeRule(), currentNode); 
            pushFollow(FOLLOW_ruleWriteToTape_in_entryRuleWriteToTape2638);
            iv_ruleWriteToTape=ruleWriteToTape();
            _fsp--;

             current =iv_ruleWriteToTape; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleWriteToTape2648); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleWriteToTape


    // $ANTLR start ruleWriteToTape
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1358:1: ruleWriteToTape returns [EObject current=null] : ( 'write' ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) ) ( '<-' ( ( RULE_ID ) ) )? ) ;
    public final EObject ruleWriteToTape() throws RecognitionException {
        EObject current = null;

        Token lv_symbol_1_1=null;
        Token lv_symbol_1_2=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1363:6: ( ( 'write' ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) ) ( '<-' ( ( RULE_ID ) ) )? ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1364:1: ( 'write' ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) ) ( '<-' ( ( RULE_ID ) ) )? )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1364:1: ( 'write' ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) ) ( '<-' ( ( RULE_ID ) ) )? )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1364:3: 'write' ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) ) ( '<-' ( ( RULE_ID ) ) )?
            {
            match(input,35,FOLLOW_35_in_ruleWriteToTape2683); 

                    createLeafNode(grammarAccess.getWriteToTapeAccess().getWriteKeyword_0(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1368:1: ( ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1369:1: ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1369:1: ( (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1370:1: (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1370:1: (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS )
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( (LA21_0==RULE_CHAR) ) {
                alt21=1;
            }
            else if ( (LA21_0==RULE_EPS) ) {
                alt21=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("1370:1: (lv_symbol_1_1= RULE_CHAR | lv_symbol_1_2= RULE_EPS )", 21, 0, input);

                throw nvae;
            }
            switch (alt21) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1371:3: lv_symbol_1_1= RULE_CHAR
                    {
                    lv_symbol_1_1=(Token)input.LT(1);
                    match(input,RULE_CHAR,FOLLOW_RULE_CHAR_in_ruleWriteToTape2702); 

                    			createLeafNode(grammarAccess.getWriteToTapeAccess().getSymbolCHARTerminalRuleCall_1_0_0(), "symbol"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getWriteToTapeRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"symbol",
                    	        		lv_symbol_1_1, 
                    	        		"CHAR", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }
                    break;
                case 2 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1392:8: lv_symbol_1_2= RULE_EPS
                    {
                    lv_symbol_1_2=(Token)input.LT(1);
                    match(input,RULE_EPS,FOLLOW_RULE_EPS_in_ruleWriteToTape2722); 

                    			createLeafNode(grammarAccess.getWriteToTapeAccess().getSymbolEPSTerminalRuleCall_1_0_1(), "symbol"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getWriteToTapeRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"symbol",
                    	        		lv_symbol_1_2, 
                    	        		"EPS", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }
                    break;

            }


            }


            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1416:2: ( '<-' ( ( RULE_ID ) ) )?
            int alt22=2;
            int LA22_0 = input.LA(1);

            if ( (LA22_0==34) ) {
                alt22=1;
            }
            switch (alt22) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1416:4: '<-' ( ( RULE_ID ) )
                    {
                    match(input,34,FOLLOW_34_in_ruleWriteToTape2741); 

                            createLeafNode(grammarAccess.getWriteToTapeAccess().getLessThanSignHyphenMinusKeyword_2_0(), null); 
                        
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1420:1: ( ( RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1421:1: ( RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1421:1: ( RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1422:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getWriteToTapeRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleWriteToTape2759); 

                    		createLeafNode(grammarAccess.getWriteToTapeAccess().getTapeTapeCrossReference_2_1_0(), "tape"); 
                    	

                    }


                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleWriteToTape


    // $ANTLR start entryRuleMoveTapeLeft
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1442:1: entryRuleMoveTapeLeft returns [EObject current=null] : iv_ruleMoveTapeLeft= ruleMoveTapeLeft EOF ;
    public final EObject entryRuleMoveTapeLeft() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMoveTapeLeft = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1443:2: (iv_ruleMoveTapeLeft= ruleMoveTapeLeft EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1444:2: iv_ruleMoveTapeLeft= ruleMoveTapeLeft EOF
            {
             currentNode = createCompositeNode(grammarAccess.getMoveTapeLeftRule(), currentNode); 
            pushFollow(FOLLOW_ruleMoveTapeLeft_in_entryRuleMoveTapeLeft2797);
            iv_ruleMoveTapeLeft=ruleMoveTapeLeft();
            _fsp--;

             current =iv_ruleMoveTapeLeft; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMoveTapeLeft2807); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleMoveTapeLeft


    // $ANTLR start ruleMoveTapeLeft
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1451:1: ruleMoveTapeLeft returns [EObject current=null] : ( () 'left' ( '<-' ( ( RULE_ID ) ) )? ) ;
    public final EObject ruleMoveTapeLeft() throws RecognitionException {
        EObject current = null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1456:6: ( ( () 'left' ( '<-' ( ( RULE_ID ) ) )? ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1457:1: ( () 'left' ( '<-' ( ( RULE_ID ) ) )? )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1457:1: ( () 'left' ( '<-' ( ( RULE_ID ) ) )? )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1457:2: () 'left' ( '<-' ( ( RULE_ID ) ) )?
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1457:2: ()
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1458:5: 
            {
             
                    temp=factory.create(grammarAccess.getMoveTapeLeftAccess().getMoveTapeLeftAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getMoveTapeLeftAccess().getMoveTapeLeftAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,36,FOLLOW_36_in_ruleMoveTapeLeft2851); 

                    createLeafNode(grammarAccess.getMoveTapeLeftAccess().getLeftKeyword_1(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1472:1: ( '<-' ( ( RULE_ID ) ) )?
            int alt23=2;
            int LA23_0 = input.LA(1);

            if ( (LA23_0==34) ) {
                alt23=1;
            }
            switch (alt23) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1472:3: '<-' ( ( RULE_ID ) )
                    {
                    match(input,34,FOLLOW_34_in_ruleMoveTapeLeft2862); 

                            createLeafNode(grammarAccess.getMoveTapeLeftAccess().getLessThanSignHyphenMinusKeyword_2_0(), null); 
                        
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1476:1: ( ( RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1477:1: ( RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1477:1: ( RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1478:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getMoveTapeLeftRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleMoveTapeLeft2880); 

                    		createLeafNode(grammarAccess.getMoveTapeLeftAccess().getTapeTapeCrossReference_2_1_0(), "tape"); 
                    	

                    }


                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleMoveTapeLeft


    // $ANTLR start entryRuleMoveTapeRight
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1498:1: entryRuleMoveTapeRight returns [EObject current=null] : iv_ruleMoveTapeRight= ruleMoveTapeRight EOF ;
    public final EObject entryRuleMoveTapeRight() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMoveTapeRight = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1499:2: (iv_ruleMoveTapeRight= ruleMoveTapeRight EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1500:2: iv_ruleMoveTapeRight= ruleMoveTapeRight EOF
            {
             currentNode = createCompositeNode(grammarAccess.getMoveTapeRightRule(), currentNode); 
            pushFollow(FOLLOW_ruleMoveTapeRight_in_entryRuleMoveTapeRight2918);
            iv_ruleMoveTapeRight=ruleMoveTapeRight();
            _fsp--;

             current =iv_ruleMoveTapeRight; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMoveTapeRight2928); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleMoveTapeRight


    // $ANTLR start ruleMoveTapeRight
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1507:1: ruleMoveTapeRight returns [EObject current=null] : ( () 'right' ( '<-' ( ( RULE_ID ) ) )? ) ;
    public final EObject ruleMoveTapeRight() throws RecognitionException {
        EObject current = null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1512:6: ( ( () 'right' ( '<-' ( ( RULE_ID ) ) )? ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1513:1: ( () 'right' ( '<-' ( ( RULE_ID ) ) )? )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1513:1: ( () 'right' ( '<-' ( ( RULE_ID ) ) )? )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1513:2: () 'right' ( '<-' ( ( RULE_ID ) ) )?
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1513:2: ()
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1514:5: 
            {
             
                    temp=factory.create(grammarAccess.getMoveTapeRightAccess().getMoveTapeRightAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getMoveTapeRightAccess().getMoveTapeRightAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,37,FOLLOW_37_in_ruleMoveTapeRight2972); 

                    createLeafNode(grammarAccess.getMoveTapeRightAccess().getRightKeyword_1(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1528:1: ( '<-' ( ( RULE_ID ) ) )?
            int alt24=2;
            int LA24_0 = input.LA(1);

            if ( (LA24_0==34) ) {
                alt24=1;
            }
            switch (alt24) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1528:3: '<-' ( ( RULE_ID ) )
                    {
                    match(input,34,FOLLOW_34_in_ruleMoveTapeRight2983); 

                            createLeafNode(grammarAccess.getMoveTapeRightAccess().getLessThanSignHyphenMinusKeyword_2_0(), null); 
                        
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1532:1: ( ( RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1533:1: ( RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1533:1: ( RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1534:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getMoveTapeRightRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleMoveTapeRight3001); 

                    		createLeafNode(grammarAccess.getMoveTapeRightAccess().getTapeTapeCrossReference_2_1_0(), "tape"); 
                    	

                    }


                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleMoveTapeRight


    // $ANTLR start entryRuleLoop
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1554:1: entryRuleLoop returns [EObject current=null] : iv_ruleLoop= ruleLoop EOF ;
    public final EObject entryRuleLoop() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLoop = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1555:2: (iv_ruleLoop= ruleLoop EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1556:2: iv_ruleLoop= ruleLoop EOF
            {
             currentNode = createCompositeNode(grammarAccess.getLoopRule(), currentNode); 
            pushFollow(FOLLOW_ruleLoop_in_entryRuleLoop3039);
            iv_ruleLoop=ruleLoop();
            _fsp--;

             current =iv_ruleLoop; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleLoop3049); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleLoop


    // $ANTLR start ruleLoop
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1563:1: ruleLoop returns [EObject current=null] : ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'loop' '{' '}' ) ;
    public final EObject ruleLoop() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1568:6: ( ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'loop' '{' '}' ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1569:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'loop' '{' '}' )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1569:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'loop' '{' '}' )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1569:2: () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'loop' '{' '}'
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1569:2: ()
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1570:5: 
            {
             
                    temp=factory.create(grammarAccess.getLoopAccess().getLoopAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getLoopAccess().getLoopAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1580:2: ( ( (lv_name_1_0= RULE_ID ) ) ':' )?
            int alt25=2;
            int LA25_0 = input.LA(1);

            if ( (LA25_0==RULE_ID) ) {
                alt25=1;
            }
            switch (alt25) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1580:3: ( (lv_name_1_0= RULE_ID ) ) ':'
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1580:3: ( (lv_name_1_0= RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1581:1: (lv_name_1_0= RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1581:1: (lv_name_1_0= RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1582:3: lv_name_1_0= RULE_ID
                    {
                    lv_name_1_0=(Token)input.LT(1);
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleLoop3101); 

                    			createLeafNode(grammarAccess.getLoopAccess().getNameIDTerminalRuleCall_1_0_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getLoopRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_1_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,16,FOLLOW_16_in_ruleLoop3116); 

                            createLeafNode(grammarAccess.getLoopAccess().getColonKeyword_1_1(), null); 
                        

                    }
                    break;

            }

            match(input,38,FOLLOW_38_in_ruleLoop3128); 

                    createLeafNode(grammarAccess.getLoopAccess().getLoopKeyword_2(), null); 
                
            match(input,20,FOLLOW_20_in_ruleLoop3138); 

                    createLeafNode(grammarAccess.getLoopAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            match(input,21,FOLLOW_21_in_ruleLoop3148); 

                    createLeafNode(grammarAccess.getLoopAccess().getRightCurlyBracketKeyword_4(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleLoop


    // $ANTLR start entryRuleWhile
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1628:1: entryRuleWhile returns [EObject current=null] : iv_ruleWhile= ruleWhile EOF ;
    public final EObject entryRuleWhile() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleWhile = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1629:2: (iv_ruleWhile= ruleWhile EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1630:2: iv_ruleWhile= ruleWhile EOF
            {
             currentNode = createCompositeNode(grammarAccess.getWhileRule(), currentNode); 
            pushFollow(FOLLOW_ruleWhile_in_entryRuleWhile3184);
            iv_ruleWhile=ruleWhile();
            _fsp--;

             current =iv_ruleWhile; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleWhile3194); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleWhile


    // $ANTLR start ruleWhile
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1637:1: ruleWhile returns [EObject current=null] : ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'while' '{' '}' ) ;
    public final EObject ruleWhile() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1642:6: ( ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'while' '{' '}' ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1643:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'while' '{' '}' )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1643:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'while' '{' '}' )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1643:2: () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'while' '{' '}'
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1643:2: ()
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1644:5: 
            {
             
                    temp=factory.create(grammarAccess.getWhileAccess().getWhileAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getWhileAccess().getWhileAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1654:2: ( ( (lv_name_1_0= RULE_ID ) ) ':' )?
            int alt26=2;
            int LA26_0 = input.LA(1);

            if ( (LA26_0==RULE_ID) ) {
                alt26=1;
            }
            switch (alt26) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1654:3: ( (lv_name_1_0= RULE_ID ) ) ':'
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1654:3: ( (lv_name_1_0= RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1655:1: (lv_name_1_0= RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1655:1: (lv_name_1_0= RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1656:3: lv_name_1_0= RULE_ID
                    {
                    lv_name_1_0=(Token)input.LT(1);
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleWhile3246); 

                    			createLeafNode(grammarAccess.getWhileAccess().getNameIDTerminalRuleCall_1_0_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getWhileRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_1_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,16,FOLLOW_16_in_ruleWhile3261); 

                            createLeafNode(grammarAccess.getWhileAccess().getColonKeyword_1_1(), null); 
                        

                    }
                    break;

            }

            match(input,39,FOLLOW_39_in_ruleWhile3273); 

                    createLeafNode(grammarAccess.getWhileAccess().getWhileKeyword_2(), null); 
                
            match(input,20,FOLLOW_20_in_ruleWhile3283); 

                    createLeafNode(grammarAccess.getWhileAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            match(input,21,FOLLOW_21_in_ruleWhile3293); 

                    createLeafNode(grammarAccess.getWhileAccess().getRightCurlyBracketKeyword_4(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleWhile


    // $ANTLR start entryRuleTuring
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1702:1: entryRuleTuring returns [EObject current=null] : iv_ruleTuring= ruleTuring EOF ;
    public final EObject entryRuleTuring() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTuring = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1703:2: (iv_ruleTuring= ruleTuring EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1704:2: iv_ruleTuring= ruleTuring EOF
            {
             currentNode = createCompositeNode(grammarAccess.getTuringRule(), currentNode); 
            pushFollow(FOLLOW_ruleTuring_in_entryRuleTuring3329);
            iv_ruleTuring=ruleTuring();
            _fsp--;

             current =iv_ruleTuring; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTuring3339); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleTuring


    // $ANTLR start ruleTuring
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1711:1: ruleTuring returns [EObject current=null] : ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'turing' '{' '}' ) ;
    public final EObject ruleTuring() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1716:6: ( ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'turing' '{' '}' ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1717:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'turing' '{' '}' )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1717:1: ( () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'turing' '{' '}' )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1717:2: () ( ( (lv_name_1_0= RULE_ID ) ) ':' )? 'turing' '{' '}'
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1717:2: ()
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1718:5: 
            {
             
                    temp=factory.create(grammarAccess.getTuringAccess().getTuringAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getTuringAccess().getTuringAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1728:2: ( ( (lv_name_1_0= RULE_ID ) ) ':' )?
            int alt27=2;
            int LA27_0 = input.LA(1);

            if ( (LA27_0==RULE_ID) ) {
                alt27=1;
            }
            switch (alt27) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1728:3: ( (lv_name_1_0= RULE_ID ) ) ':'
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1728:3: ( (lv_name_1_0= RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1729:1: (lv_name_1_0= RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1729:1: (lv_name_1_0= RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1730:3: lv_name_1_0= RULE_ID
                    {
                    lv_name_1_0=(Token)input.LT(1);
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTuring3391); 

                    			createLeafNode(grammarAccess.getTuringAccess().getNameIDTerminalRuleCall_1_0_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getTuringRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_1_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,16,FOLLOW_16_in_ruleTuring3406); 

                            createLeafNode(grammarAccess.getTuringAccess().getColonKeyword_1_1(), null); 
                        

                    }
                    break;

            }

            match(input,40,FOLLOW_40_in_ruleTuring3418); 

                    createLeafNode(grammarAccess.getTuringAccess().getTuringKeyword_2(), null); 
                
            match(input,20,FOLLOW_20_in_ruleTuring3428); 

                    createLeafNode(grammarAccess.getTuringAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            match(input,21,FOLLOW_21_in_ruleTuring3438); 

                    createLeafNode(grammarAccess.getTuringAccess().getRightCurlyBracketKeyword_4(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleTuring


    // $ANTLR start entryRuleComponent
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1776:1: entryRuleComponent returns [EObject current=null] : iv_ruleComponent= ruleComponent EOF ;
    public final EObject entryRuleComponent() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleComponent = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1777:2: (iv_ruleComponent= ruleComponent EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1778:2: iv_ruleComponent= ruleComponent EOF
            {
             currentNode = createCompositeNode(grammarAccess.getComponentRule(), currentNode); 
            pushFollow(FOLLOW_ruleComponent_in_entryRuleComponent3474);
            iv_ruleComponent=ruleComponent();
            _fsp--;

             current =iv_ruleComponent; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleComponent3484); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleComponent


    // $ANTLR start ruleComponent
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1785:1: ruleComponent returns [EObject current=null] : (this_Tape_0= ruleTape | this_Stack_1= ruleStack | this_StatesRegister_2= ruleStatesRegister ) ;
    public final EObject ruleComponent() throws RecognitionException {
        EObject current = null;

        EObject this_Tape_0 = null;

        EObject this_Stack_1 = null;

        EObject this_StatesRegister_2 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1790:6: ( (this_Tape_0= ruleTape | this_Stack_1= ruleStack | this_StatesRegister_2= ruleStatesRegister ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1791:1: (this_Tape_0= ruleTape | this_Stack_1= ruleStack | this_StatesRegister_2= ruleStatesRegister )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1791:1: (this_Tape_0= ruleTape | this_Stack_1= ruleStack | this_StatesRegister_2= ruleStatesRegister )
            int alt28=3;
            int LA28_0 = input.LA(1);

            if ( (LA28_0==RULE_ID) ) {
                int LA28_1 = input.LA(2);

                if ( (LA28_1==16) ) {
                    switch ( input.LA(3) ) {
                    case 18:
                        {
                        alt28=1;
                        }
                        break;
                    case 29:
                        {
                        alt28=3;
                        }
                        break;
                    case 41:
                        {
                        alt28=2;
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("1791:1: (this_Tape_0= ruleTape | this_Stack_1= ruleStack | this_StatesRegister_2= ruleStatesRegister )", 28, 2, input);

                        throw nvae;
                    }

                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("1791:1: (this_Tape_0= ruleTape | this_Stack_1= ruleStack | this_StatesRegister_2= ruleStatesRegister )", 28, 1, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("1791:1: (this_Tape_0= ruleTape | this_Stack_1= ruleStack | this_StatesRegister_2= ruleStatesRegister )", 28, 0, input);

                throw nvae;
            }
            switch (alt28) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1792:5: this_Tape_0= ruleTape
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getComponentAccess().getTapeParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleTape_in_ruleComponent3531);
                    this_Tape_0=ruleTape();
                    _fsp--;

                     
                            current = this_Tape_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1802:5: this_Stack_1= ruleStack
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getComponentAccess().getStackParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleStack_in_ruleComponent3558);
                    this_Stack_1=ruleStack();
                    _fsp--;

                     
                            current = this_Stack_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 3 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1812:5: this_StatesRegister_2= ruleStatesRegister
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getComponentAccess().getStatesRegisterParserRuleCall_2(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleStatesRegister_in_ruleComponent3585);
                    this_StatesRegister_2=ruleStatesRegister();
                    _fsp--;

                     
                            current = this_StatesRegister_2; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleComponent


    // $ANTLR start entryRuleTape
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1828:1: entryRuleTape returns [EObject current=null] : iv_ruleTape= ruleTape EOF ;
    public final EObject entryRuleTape() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTape = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1829:2: (iv_ruleTape= ruleTape EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1830:2: iv_ruleTape= ruleTape EOF
            {
             currentNode = createCompositeNode(grammarAccess.getTapeRule(), currentNode); 
            pushFollow(FOLLOW_ruleTape_in_entryRuleTape3620);
            iv_ruleTape=ruleTape();
            _fsp--;

             current =iv_ruleTape; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTape3630); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleTape


    // $ANTLR start ruleTape
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1837:1: ruleTape returns [EObject current=null] : ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'tape' ( '{' ( ( (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING ) ) ) ( '{' ( ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) ) ) ( ',' ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) ) )* '}' )? '}' )? ) ;
    public final EObject ruleTape() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        Token lv_input_5_1=null;
        Token lv_input_5_2=null;
        Token lv_alphabet_7_1=null;
        Token lv_alphabet_7_2=null;
        Token lv_alphabet_9_1=null;
        Token lv_alphabet_9_2=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1842:6: ( ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'tape' ( '{' ( ( (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING ) ) ) ( '{' ( ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) ) ) ( ',' ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) ) )* '}' )? '}' )? ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1843:1: ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'tape' ( '{' ( ( (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING ) ) ) ( '{' ( ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) ) ) ( ',' ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) ) )* '}' )? '}' )? )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1843:1: ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'tape' ( '{' ( ( (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING ) ) ) ( '{' ( ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) ) ) ( ',' ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) ) )* '}' )? '}' )? )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1843:2: () ( (lv_name_1_0= RULE_ID ) ) ':' 'tape' ( '{' ( ( (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING ) ) ) ( '{' ( ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) ) ) ( ',' ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) ) )* '}' )? '}' )?
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1843:2: ()
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1844:5: 
            {
             
                    temp=factory.create(grammarAccess.getTapeAccess().getTapeAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getTapeAccess().getTapeAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1854:2: ( (lv_name_1_0= RULE_ID ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1855:1: (lv_name_1_0= RULE_ID )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1855:1: (lv_name_1_0= RULE_ID )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1856:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTape3681); 

            			createLeafNode(grammarAccess.getTapeAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getTapeRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,16,FOLLOW_16_in_ruleTape3696); 

                    createLeafNode(grammarAccess.getTapeAccess().getColonKeyword_2(), null); 
                
            match(input,18,FOLLOW_18_in_ruleTape3706); 

                    createLeafNode(grammarAccess.getTapeAccess().getTapeKeyword_3(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1886:1: ( '{' ( ( (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING ) ) ) ( '{' ( ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) ) ) ( ',' ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) ) )* '}' )? '}' )?
            int alt34=2;
            int LA34_0 = input.LA(1);

            if ( (LA34_0==20) ) {
                alt34=1;
            }
            switch (alt34) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1886:3: '{' ( ( (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING ) ) ) ( '{' ( ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) ) ) ( ',' ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) ) )* '}' )? '}'
                    {
                    match(input,20,FOLLOW_20_in_ruleTape3717); 

                            createLeafNode(grammarAccess.getTapeAccess().getLeftCurlyBracketKeyword_4_0(), null); 
                        
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1890:1: ( ( (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING ) ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1891:1: ( (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING ) )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1891:1: ( (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1892:1: (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1892:1: (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING )
                    int alt29=2;
                    int LA29_0 = input.LA(1);

                    if ( (LA29_0==RULE_STRING) ) {
                        alt29=1;
                    }
                    else if ( (LA29_0==RULE_ML_STRING) ) {
                        alt29=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("1892:1: (lv_input_5_1= RULE_STRING | lv_input_5_2= RULE_ML_STRING )", 29, 0, input);

                        throw nvae;
                    }
                    switch (alt29) {
                        case 1 :
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1893:3: lv_input_5_1= RULE_STRING
                            {
                            lv_input_5_1=(Token)input.LT(1);
                            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleTape3736); 

                            			createLeafNode(grammarAccess.getTapeAccess().getInputSTRINGTerminalRuleCall_4_1_0_0(), "input"); 
                            		

                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getTapeRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode, current);
                            	        }
                            	        try {
                            	       		set(
                            	       			current, 
                            	       			"input",
                            	        		lv_input_5_1, 
                            	        		"STRING", 
                            	        		lastConsumedNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	    

                            }
                            break;
                        case 2 :
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1914:8: lv_input_5_2= RULE_ML_STRING
                            {
                            lv_input_5_2=(Token)input.LT(1);
                            match(input,RULE_ML_STRING,FOLLOW_RULE_ML_STRING_in_ruleTape3756); 

                            			createLeafNode(grammarAccess.getTapeAccess().getInputML_STRINGTerminalRuleCall_4_1_0_1(), "input"); 
                            		

                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getTapeRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode, current);
                            	        }
                            	        try {
                            	       		set(
                            	       			current, 
                            	       			"input",
                            	        		lv_input_5_2, 
                            	        		"ML_STRING", 
                            	        		lastConsumedNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	    

                            }
                            break;

                    }


                    }


                    }

                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1938:2: ( '{' ( ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) ) ) ( ',' ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) ) )* '}' )?
                    int alt33=2;
                    int LA33_0 = input.LA(1);

                    if ( (LA33_0==20) ) {
                        alt33=1;
                    }
                    switch (alt33) {
                        case 1 :
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1938:4: '{' ( ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) ) ) ( ',' ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) ) )* '}'
                            {
                            match(input,20,FOLLOW_20_in_ruleTape3775); 

                                    createLeafNode(grammarAccess.getTapeAccess().getLeftCurlyBracketKeyword_4_2_0(), null); 
                                
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1942:1: ( ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) ) )
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1943:1: ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) )
                            {
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1943:1: ( (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS ) )
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1944:1: (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS )
                            {
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1944:1: (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS )
                            int alt30=2;
                            int LA30_0 = input.LA(1);

                            if ( (LA30_0==RULE_CHAR) ) {
                                alt30=1;
                            }
                            else if ( (LA30_0==RULE_EPS) ) {
                                alt30=2;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("1944:1: (lv_alphabet_7_1= RULE_CHAR | lv_alphabet_7_2= RULE_EPS )", 30, 0, input);

                                throw nvae;
                            }
                            switch (alt30) {
                                case 1 :
                                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1945:3: lv_alphabet_7_1= RULE_CHAR
                                    {
                                    lv_alphabet_7_1=(Token)input.LT(1);
                                    match(input,RULE_CHAR,FOLLOW_RULE_CHAR_in_ruleTape3794); 

                                    			createLeafNode(grammarAccess.getTapeAccess().getAlphabetCHARTerminalRuleCall_4_2_1_0_0(), "alphabet"); 
                                    		

                                    	        if (current==null) {
                                    	            current = factory.create(grammarAccess.getTapeRule().getType().getClassifier());
                                    	            associateNodeWithAstElement(currentNode, current);
                                    	        }
                                    	        try {
                                    	       		add(
                                    	       			current, 
                                    	       			"alphabet",
                                    	        		lv_alphabet_7_1, 
                                    	        		"CHAR", 
                                    	        		lastConsumedNode);
                                    	        } catch (ValueConverterException vce) {
                                    				handleValueConverterException(vce);
                                    	        }
                                    	    

                                    }
                                    break;
                                case 2 :
                                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1966:8: lv_alphabet_7_2= RULE_EPS
                                    {
                                    lv_alphabet_7_2=(Token)input.LT(1);
                                    match(input,RULE_EPS,FOLLOW_RULE_EPS_in_ruleTape3814); 

                                    			createLeafNode(grammarAccess.getTapeAccess().getAlphabetEPSTerminalRuleCall_4_2_1_0_1(), "alphabet"); 
                                    		

                                    	        if (current==null) {
                                    	            current = factory.create(grammarAccess.getTapeRule().getType().getClassifier());
                                    	            associateNodeWithAstElement(currentNode, current);
                                    	        }
                                    	        try {
                                    	       		add(
                                    	       			current, 
                                    	       			"alphabet",
                                    	        		lv_alphabet_7_2, 
                                    	        		"EPS", 
                                    	        		lastConsumedNode);
                                    	        } catch (ValueConverterException vce) {
                                    				handleValueConverterException(vce);
                                    	        }
                                    	    

                                    }
                                    break;

                            }


                            }


                            }

                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1990:2: ( ',' ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) ) )*
                            loop32:
                            do {
                                int alt32=2;
                                int LA32_0 = input.LA(1);

                                if ( (LA32_0==31) ) {
                                    alt32=1;
                                }


                                switch (alt32) {
                            	case 1 :
                            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1990:4: ',' ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) )
                            	    {
                            	    match(input,31,FOLLOW_31_in_ruleTape3833); 

                            	            createLeafNode(grammarAccess.getTapeAccess().getCommaKeyword_4_2_2_0(), null); 
                            	        
                            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1994:1: ( ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) ) )
                            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1995:1: ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) )
                            	    {
                            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1995:1: ( (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS ) )
                            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1996:1: (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS )
                            	    {
                            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1996:1: (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS )
                            	    int alt31=2;
                            	    int LA31_0 = input.LA(1);

                            	    if ( (LA31_0==RULE_CHAR) ) {
                            	        alt31=1;
                            	    }
                            	    else if ( (LA31_0==RULE_EPS) ) {
                            	        alt31=2;
                            	    }
                            	    else {
                            	        NoViableAltException nvae =
                            	            new NoViableAltException("1996:1: (lv_alphabet_9_1= RULE_CHAR | lv_alphabet_9_2= RULE_EPS )", 31, 0, input);

                            	        throw nvae;
                            	    }
                            	    switch (alt31) {
                            	        case 1 :
                            	            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:1997:3: lv_alphabet_9_1= RULE_CHAR
                            	            {
                            	            lv_alphabet_9_1=(Token)input.LT(1);
                            	            match(input,RULE_CHAR,FOLLOW_RULE_CHAR_in_ruleTape3852); 

                            	            			createLeafNode(grammarAccess.getTapeAccess().getAlphabetCHARTerminalRuleCall_4_2_2_1_0_0(), "alphabet"); 
                            	            		

                            	            	        if (current==null) {
                            	            	            current = factory.create(grammarAccess.getTapeRule().getType().getClassifier());
                            	            	            associateNodeWithAstElement(currentNode, current);
                            	            	        }
                            	            	        try {
                            	            	       		add(
                            	            	       			current, 
                            	            	       			"alphabet",
                            	            	        		lv_alphabet_9_1, 
                            	            	        		"CHAR", 
                            	            	        		lastConsumedNode);
                            	            	        } catch (ValueConverterException vce) {
                            	            				handleValueConverterException(vce);
                            	            	        }
                            	            	    

                            	            }
                            	            break;
                            	        case 2 :
                            	            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2018:8: lv_alphabet_9_2= RULE_EPS
                            	            {
                            	            lv_alphabet_9_2=(Token)input.LT(1);
                            	            match(input,RULE_EPS,FOLLOW_RULE_EPS_in_ruleTape3872); 

                            	            			createLeafNode(grammarAccess.getTapeAccess().getAlphabetEPSTerminalRuleCall_4_2_2_1_0_1(), "alphabet"); 
                            	            		

                            	            	        if (current==null) {
                            	            	            current = factory.create(grammarAccess.getTapeRule().getType().getClassifier());
                            	            	            associateNodeWithAstElement(currentNode, current);
                            	            	        }
                            	            	        try {
                            	            	       		add(
                            	            	       			current, 
                            	            	       			"alphabet",
                            	            	        		lv_alphabet_9_2, 
                            	            	        		"EPS", 
                            	            	        		lastConsumedNode);
                            	            	        } catch (ValueConverterException vce) {
                            	            				handleValueConverterException(vce);
                            	            	        }
                            	            	    

                            	            }
                            	            break;

                            	    }


                            	    }


                            	    }


                            	    }
                            	    break;

                            	default :
                            	    break loop32;
                                }
                            } while (true);

                            match(input,21,FOLLOW_21_in_ruleTape3892); 

                                    createLeafNode(grammarAccess.getTapeAccess().getRightCurlyBracketKeyword_4_2_3(), null); 
                                

                            }
                            break;

                    }

                    match(input,21,FOLLOW_21_in_ruleTape3904); 

                            createLeafNode(grammarAccess.getTapeAccess().getRightCurlyBracketKeyword_4_3(), null); 
                        

                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleTape


    // $ANTLR start entryRuleStack
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2058:1: entryRuleStack returns [EObject current=null] : iv_ruleStack= ruleStack EOF ;
    public final EObject entryRuleStack() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStack = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2059:2: (iv_ruleStack= ruleStack EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2060:2: iv_ruleStack= ruleStack EOF
            {
             currentNode = createCompositeNode(grammarAccess.getStackRule(), currentNode); 
            pushFollow(FOLLOW_ruleStack_in_entryRuleStack3942);
            iv_ruleStack=ruleStack();
            _fsp--;

             current =iv_ruleStack; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleStack3952); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleStack


    // $ANTLR start ruleStack
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2067:1: ruleStack returns [EObject current=null] : ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'stack' ) ;
    public final EObject ruleStack() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2072:6: ( ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'stack' ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2073:1: ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'stack' )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2073:1: ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'stack' )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2073:2: () ( (lv_name_1_0= RULE_ID ) ) ':' 'stack'
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2073:2: ()
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2074:5: 
            {
             
                    temp=factory.create(grammarAccess.getStackAccess().getStackAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getStackAccess().getStackAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2084:2: ( (lv_name_1_0= RULE_ID ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2085:1: (lv_name_1_0= RULE_ID )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2085:1: (lv_name_1_0= RULE_ID )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2086:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleStack4003); 

            			createLeafNode(grammarAccess.getStackAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getStackRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,16,FOLLOW_16_in_ruleStack4018); 

                    createLeafNode(grammarAccess.getStackAccess().getColonKeyword_2(), null); 
                
            match(input,41,FOLLOW_41_in_ruleStack4028); 

                    createLeafNode(grammarAccess.getStackAccess().getStackKeyword_3(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleStack


    // $ANTLR start entryRuleStatesRegister
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2124:1: entryRuleStatesRegister returns [EObject current=null] : iv_ruleStatesRegister= ruleStatesRegister EOF ;
    public final EObject entryRuleStatesRegister() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStatesRegister = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2125:2: (iv_ruleStatesRegister= ruleStatesRegister EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2126:2: iv_ruleStatesRegister= ruleStatesRegister EOF
            {
             currentNode = createCompositeNode(grammarAccess.getStatesRegisterRule(), currentNode); 
            pushFollow(FOLLOW_ruleStatesRegister_in_entryRuleStatesRegister4064);
            iv_ruleStatesRegister=ruleStatesRegister();
            _fsp--;

             current =iv_ruleStatesRegister; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleStatesRegister4074); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleStatesRegister


    // $ANTLR start ruleStatesRegister
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2133:1: ruleStatesRegister returns [EObject current=null] : ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'states' '{' ( (lv_states_5_0= ruleState ) )+ '}' ) ;
    public final EObject ruleStatesRegister() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_states_5_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2138:6: ( ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'states' '{' ( (lv_states_5_0= ruleState ) )+ '}' ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2139:1: ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'states' '{' ( (lv_states_5_0= ruleState ) )+ '}' )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2139:1: ( () ( (lv_name_1_0= RULE_ID ) ) ':' 'states' '{' ( (lv_states_5_0= ruleState ) )+ '}' )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2139:2: () ( (lv_name_1_0= RULE_ID ) ) ':' 'states' '{' ( (lv_states_5_0= ruleState ) )+ '}'
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2139:2: ()
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2140:5: 
            {
             
                    temp=factory.create(grammarAccess.getStatesRegisterAccess().getStatesRegisterAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getStatesRegisterAccess().getStatesRegisterAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2150:2: ( (lv_name_1_0= RULE_ID ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2151:1: (lv_name_1_0= RULE_ID )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2151:1: (lv_name_1_0= RULE_ID )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2152:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleStatesRegister4125); 

            			createLeafNode(grammarAccess.getStatesRegisterAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getStatesRegisterRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,16,FOLLOW_16_in_ruleStatesRegister4140); 

                    createLeafNode(grammarAccess.getStatesRegisterAccess().getColonKeyword_2(), null); 
                
            match(input,29,FOLLOW_29_in_ruleStatesRegister4150); 

                    createLeafNode(grammarAccess.getStatesRegisterAccess().getStatesKeyword_3(), null); 
                
            match(input,20,FOLLOW_20_in_ruleStatesRegister4160); 

                    createLeafNode(grammarAccess.getStatesRegisterAccess().getLeftCurlyBracketKeyword_4(), null); 
                
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2186:1: ( (lv_states_5_0= ruleState ) )+
            int cnt35=0;
            loop35:
            do {
                int alt35=2;
                int LA35_0 = input.LA(1);

                if ( (LA35_0==RULE_ID||(LA35_0>=42 && LA35_0<=45)) ) {
                    alt35=1;
                }


                switch (alt35) {
            	case 1 :
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2187:1: (lv_states_5_0= ruleState )
            	    {
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2187:1: (lv_states_5_0= ruleState )
            	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2188:3: lv_states_5_0= ruleState
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getStatesRegisterAccess().getStatesStateParserRuleCall_5_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleState_in_ruleStatesRegister4181);
            	    lv_states_5_0=ruleState();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getStatesRegisterRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"states",
            	    	        		lv_states_5_0, 
            	    	        		"State", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt35 >= 1 ) break loop35;
                        EarlyExitException eee =
                            new EarlyExitException(35, input);
                        throw eee;
                }
                cnt35++;
            } while (true);

            match(input,21,FOLLOW_21_in_ruleStatesRegister4192); 

                    createLeafNode(grammarAccess.getStatesRegisterAccess().getRightCurlyBracketKeyword_6(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleStatesRegister


    // $ANTLR start entryRuleState
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2222:1: entryRuleState returns [EObject current=null] : iv_ruleState= ruleState EOF ;
    public final EObject entryRuleState() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleState = null;


        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2223:2: (iv_ruleState= ruleState EOF )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2224:2: iv_ruleState= ruleState EOF
            {
             currentNode = createCompositeNode(grammarAccess.getStateRule(), currentNode); 
            pushFollow(FOLLOW_ruleState_in_entryRuleState4228);
            iv_ruleState=ruleState();
            _fsp--;

             current =iv_ruleState; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleState4238); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleState


    // $ANTLR start ruleState
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2231:1: ruleState returns [EObject current=null] : ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) ) ;
    public final EObject ruleState() throws RecognitionException {
        EObject current = null;

        Token lv_start_1_0=null;
        Token lv_name_3_0=null;
        Token lv_start_5_0=null;
        Token lv_name_7_0=null;
        Enumerator lv_type_2_0 = null;

        Enumerator lv_type_6_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2236:6: ( ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )
            int alt42=2;
            switch ( input.LA(1) ) {
            case 42:
                {
                switch ( input.LA(2) ) {
                case 43:
                    {
                    int LA42_2 = input.LA(3);

                    if ( (LA42_2==RULE_ID) ) {
                        int LA42_5 = input.LA(4);

                        if ( (LA42_5==20) ) {
                            alt42=2;
                        }
                        else if ( (LA42_5==EOF||LA42_5==RULE_ID||LA42_5==21||(LA42_5>=42 && LA42_5<=45)) ) {
                            alt42=1;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 5, input);

                            throw nvae;
                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 2, input);

                        throw nvae;
                    }
                    }
                    break;
                case 44:
                    {
                    int LA42_3 = input.LA(3);

                    if ( (LA42_3==RULE_ID) ) {
                        int LA42_5 = input.LA(4);

                        if ( (LA42_5==20) ) {
                            alt42=2;
                        }
                        else if ( (LA42_5==EOF||LA42_5==RULE_ID||LA42_5==21||(LA42_5>=42 && LA42_5<=45)) ) {
                            alt42=1;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 5, input);

                            throw nvae;
                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 3, input);

                        throw nvae;
                    }
                    }
                    break;
                case 45:
                    {
                    int LA42_4 = input.LA(3);

                    if ( (LA42_4==RULE_ID) ) {
                        int LA42_5 = input.LA(4);

                        if ( (LA42_5==20) ) {
                            alt42=2;
                        }
                        else if ( (LA42_5==EOF||LA42_5==RULE_ID||LA42_5==21||(LA42_5>=42 && LA42_5<=45)) ) {
                            alt42=1;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 5, input);

                            throw nvae;
                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 4, input);

                        throw nvae;
                    }
                    }
                    break;
                case RULE_ID:
                    {
                    int LA42_5 = input.LA(3);

                    if ( (LA42_5==20) ) {
                        alt42=2;
                    }
                    else if ( (LA42_5==EOF||LA42_5==RULE_ID||LA42_5==21||(LA42_5>=42 && LA42_5<=45)) ) {
                        alt42=1;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 5, input);

                        throw nvae;
                    }
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 1, input);

                    throw nvae;
                }

                }
                break;
            case 43:
                {
                int LA42_2 = input.LA(2);

                if ( (LA42_2==RULE_ID) ) {
                    int LA42_5 = input.LA(3);

                    if ( (LA42_5==20) ) {
                        alt42=2;
                    }
                    else if ( (LA42_5==EOF||LA42_5==RULE_ID||LA42_5==21||(LA42_5>=42 && LA42_5<=45)) ) {
                        alt42=1;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 5, input);

                        throw nvae;
                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 2, input);

                    throw nvae;
                }
                }
                break;
            case 44:
                {
                int LA42_3 = input.LA(2);

                if ( (LA42_3==RULE_ID) ) {
                    int LA42_5 = input.LA(3);

                    if ( (LA42_5==20) ) {
                        alt42=2;
                    }
                    else if ( (LA42_5==EOF||LA42_5==RULE_ID||LA42_5==21||(LA42_5>=42 && LA42_5<=45)) ) {
                        alt42=1;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 5, input);

                        throw nvae;
                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 3, input);

                    throw nvae;
                }
                }
                break;
            case 45:
                {
                int LA42_4 = input.LA(2);

                if ( (LA42_4==RULE_ID) ) {
                    int LA42_5 = input.LA(3);

                    if ( (LA42_5==20) ) {
                        alt42=2;
                    }
                    else if ( (LA42_5==EOF||LA42_5==RULE_ID||LA42_5==21||(LA42_5>=42 && LA42_5<=45)) ) {
                        alt42=1;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 5, input);

                        throw nvae;
                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 4, input);

                    throw nvae;
                }
                }
                break;
            case RULE_ID:
                {
                int LA42_5 = input.LA(2);

                if ( (LA42_5==20) ) {
                    alt42=2;
                }
                else if ( (LA42_5==EOF||LA42_5==RULE_ID||LA42_5==21||(LA42_5>=42 && LA42_5<=45)) ) {
                    alt42=1;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 5, input);

                    throw nvae;
                }
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("2237:1: ( ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) ) | ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' ) )", 42, 0, input);

                throw nvae;
            }

            switch (alt42) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2237:2: ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2237:2: ( () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2237:3: () ( (lv_start_1_0= 'start' ) )? ( (lv_type_2_0= ruleStateType ) )? ( (lv_name_3_0= RULE_ID ) )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2237:3: ()
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2238:5: 
                    {
                     
                            temp=factory.create(grammarAccess.getStateAccess().getStateAction_0_0().getType().getClassifier());
                            current = temp; 
                            temp = null;
                            CompositeNode newNode = createCompositeNode(grammarAccess.getStateAccess().getStateAction_0_0(), currentNode.getParent());
                        newNode.getChildren().add(currentNode);
                        moveLookaheadInfo(currentNode, newNode);
                        currentNode = newNode; 
                            associateNodeWithAstElement(currentNode, current); 
                        

                    }

                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2248:2: ( (lv_start_1_0= 'start' ) )?
                    int alt36=2;
                    int LA36_0 = input.LA(1);

                    if ( (LA36_0==42) ) {
                        alt36=1;
                    }
                    switch (alt36) {
                        case 1 :
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2249:1: (lv_start_1_0= 'start' )
                            {
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2249:1: (lv_start_1_0= 'start' )
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2250:3: lv_start_1_0= 'start'
                            {
                            lv_start_1_0=(Token)input.LT(1);
                            match(input,42,FOLLOW_42_in_ruleState4291); 

                                    createLeafNode(grammarAccess.getStateAccess().getStartStartKeyword_0_1_0(), "start"); 
                                

                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getStateRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode, current);
                            	        }
                            	        
                            	        try {
                            	       		set(current, "start", true, "start", lastConsumedNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	    

                            }


                            }
                            break;

                    }

                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2269:3: ( (lv_type_2_0= ruleStateType ) )?
                    int alt37=2;
                    int LA37_0 = input.LA(1);

                    if ( ((LA37_0>=43 && LA37_0<=45)) ) {
                        alt37=1;
                    }
                    switch (alt37) {
                        case 1 :
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2270:1: (lv_type_2_0= ruleStateType )
                            {
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2270:1: (lv_type_2_0= ruleStateType )
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2271:3: lv_type_2_0= ruleStateType
                            {
                             
                            	        currentNode=createCompositeNode(grammarAccess.getStateAccess().getTypeStateTypeEnumRuleCall_0_2_0(), currentNode); 
                            	    
                            pushFollow(FOLLOW_ruleStateType_in_ruleState4326);
                            lv_type_2_0=ruleStateType();
                            _fsp--;


                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getStateRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode.getParent(), current);
                            	        }
                            	        try {
                            	       		set(
                            	       			current, 
                            	       			"type",
                            	        		lv_type_2_0, 
                            	        		"StateType", 
                            	        		currentNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	        currentNode = currentNode.getParent();
                            	    

                            }


                            }
                            break;

                    }

                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2293:3: ( (lv_name_3_0= RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2294:1: (lv_name_3_0= RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2294:1: (lv_name_3_0= RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2295:3: lv_name_3_0= RULE_ID
                    {
                    lv_name_3_0=(Token)input.LT(1);
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleState4344); 

                    			createLeafNode(grammarAccess.getStateAccess().getNameIDTerminalRuleCall_0_3_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getStateRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_3_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2318:6: ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2318:6: ( () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}' )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2318:7: () ( (lv_start_5_0= 'start' ) )? ( (lv_type_6_0= ruleStateType ) )? ( (lv_name_7_0= RULE_ID ) ) '{' ( ( RULE_ID ) )? ( ',' ( ( RULE_ID ) ) )* '}'
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2318:7: ()
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2319:5: 
                    {
                     
                            temp=factory.create(grammarAccess.getStateAccess().getMultiStateAction_1_0().getType().getClassifier());
                            current = temp; 
                            temp = null;
                            CompositeNode newNode = createCompositeNode(grammarAccess.getStateAccess().getMultiStateAction_1_0(), currentNode.getParent());
                        newNode.getChildren().add(currentNode);
                        moveLookaheadInfo(currentNode, newNode);
                        currentNode = newNode; 
                            associateNodeWithAstElement(currentNode, current); 
                        

                    }

                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2329:2: ( (lv_start_5_0= 'start' ) )?
                    int alt38=2;
                    int LA38_0 = input.LA(1);

                    if ( (LA38_0==42) ) {
                        alt38=1;
                    }
                    switch (alt38) {
                        case 1 :
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2330:1: (lv_start_5_0= 'start' )
                            {
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2330:1: (lv_start_5_0= 'start' )
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2331:3: lv_start_5_0= 'start'
                            {
                            lv_start_5_0=(Token)input.LT(1);
                            match(input,42,FOLLOW_42_in_ruleState4384); 

                                    createLeafNode(grammarAccess.getStateAccess().getStartStartKeyword_1_1_0(), "start"); 
                                

                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getStateRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode, current);
                            	        }
                            	        
                            	        try {
                            	       		set(current, "start", true, "start", lastConsumedNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	    

                            }


                            }
                            break;

                    }

                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2350:3: ( (lv_type_6_0= ruleStateType ) )?
                    int alt39=2;
                    int LA39_0 = input.LA(1);

                    if ( ((LA39_0>=43 && LA39_0<=45)) ) {
                        alt39=1;
                    }
                    switch (alt39) {
                        case 1 :
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2351:1: (lv_type_6_0= ruleStateType )
                            {
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2351:1: (lv_type_6_0= ruleStateType )
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2352:3: lv_type_6_0= ruleStateType
                            {
                             
                            	        currentNode=createCompositeNode(grammarAccess.getStateAccess().getTypeStateTypeEnumRuleCall_1_2_0(), currentNode); 
                            	    
                            pushFollow(FOLLOW_ruleStateType_in_ruleState4419);
                            lv_type_6_0=ruleStateType();
                            _fsp--;


                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getStateRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode.getParent(), current);
                            	        }
                            	        try {
                            	       		set(
                            	       			current, 
                            	       			"type",
                            	        		lv_type_6_0, 
                            	        		"StateType", 
                            	        		currentNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	        currentNode = currentNode.getParent();
                            	    

                            }


                            }
                            break;

                    }

                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2374:3: ( (lv_name_7_0= RULE_ID ) )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2375:1: (lv_name_7_0= RULE_ID )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2375:1: (lv_name_7_0= RULE_ID )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2376:3: lv_name_7_0= RULE_ID
                    {
                    lv_name_7_0=(Token)input.LT(1);
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleState4437); 

                    			createLeafNode(grammarAccess.getStateAccess().getNameIDTerminalRuleCall_1_3_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getStateRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_7_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,20,FOLLOW_20_in_ruleState4452); 

                            createLeafNode(grammarAccess.getStateAccess().getLeftCurlyBracketKeyword_1_4(), null); 
                        
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2402:1: ( ( RULE_ID ) )?
                    int alt40=2;
                    int LA40_0 = input.LA(1);

                    if ( (LA40_0==RULE_ID) ) {
                        alt40=1;
                    }
                    switch (alt40) {
                        case 1 :
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2403:1: ( RULE_ID )
                            {
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2403:1: ( RULE_ID )
                            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2404:3: RULE_ID
                            {

                            			if (current==null) {
                            	            current = factory.create(grammarAccess.getStateRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode, current);
                            	        }
                                    
                            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleState4470); 

                            		createLeafNode(grammarAccess.getStateAccess().getStatesStateCrossReference_1_5_0(), "states"); 
                            	

                            }


                            }
                            break;

                    }

                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2416:3: ( ',' ( ( RULE_ID ) ) )*
                    loop41:
                    do {
                        int alt41=2;
                        int LA41_0 = input.LA(1);

                        if ( (LA41_0==31) ) {
                            alt41=1;
                        }


                        switch (alt41) {
                    	case 1 :
                    	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2416:5: ',' ( ( RULE_ID ) )
                    	    {
                    	    match(input,31,FOLLOW_31_in_ruleState4482); 

                    	            createLeafNode(grammarAccess.getStateAccess().getCommaKeyword_1_6_0(), null); 
                    	        
                    	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2420:1: ( ( RULE_ID ) )
                    	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2421:1: ( RULE_ID )
                    	    {
                    	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2421:1: ( RULE_ID )
                    	    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2422:3: RULE_ID
                    	    {

                    	    			if (current==null) {
                    	    	            current = factory.create(grammarAccess.getStateRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode, current);
                    	    	        }
                    	            
                    	    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleState4500); 

                    	    		createLeafNode(grammarAccess.getStateAccess().getStatesStateCrossReference_1_6_1_0(), "states"); 
                    	    	

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop41;
                        }
                    } while (true);

                    match(input,21,FOLLOW_21_in_ruleState4512); 

                            createLeafNode(grammarAccess.getStateAccess().getRightCurlyBracketKeyword_1_7(), null); 
                        

                    }


                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleState


    // $ANTLR start ruleStateType
    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2446:1: ruleStateType returns [Enumerator current=null] : ( ( 'normal' ) | ( 'end' ) | ( 'undefined' ) ) ;
    public final Enumerator ruleStateType() throws RecognitionException {
        Enumerator current = null;

         setCurrentLookahead(); resetLookahead(); 
        try {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2450:6: ( ( ( 'normal' ) | ( 'end' ) | ( 'undefined' ) ) )
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2451:1: ( ( 'normal' ) | ( 'end' ) | ( 'undefined' ) )
            {
            // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2451:1: ( ( 'normal' ) | ( 'end' ) | ( 'undefined' ) )
            int alt43=3;
            switch ( input.LA(1) ) {
            case 43:
                {
                alt43=1;
                }
                break;
            case 44:
                {
                alt43=2;
                }
                break;
            case 45:
                {
                alt43=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("2451:1: ( ( 'normal' ) | ( 'end' ) | ( 'undefined' ) )", 43, 0, input);

                throw nvae;
            }

            switch (alt43) {
                case 1 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2451:2: ( 'normal' )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2451:2: ( 'normal' )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2451:4: 'normal'
                    {
                    match(input,43,FOLLOW_43_in_ruleStateType4561); 

                            current = grammarAccess.getStateTypeAccess().getNORMALEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getStateTypeAccess().getNORMALEnumLiteralDeclaration_0(), null); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2457:6: ( 'end' )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2457:6: ( 'end' )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2457:8: 'end'
                    {
                    match(input,44,FOLLOW_44_in_ruleStateType4576); 

                            current = grammarAccess.getStateTypeAccess().getENDEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getStateTypeAccess().getENDEnumLiteralDeclaration_1(), null); 
                        

                    }


                    }
                    break;
                case 3 :
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2463:6: ( 'undefined' )
                    {
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2463:6: ( 'undefined' )
                    // ../de.jadehs.cosima.xtext/src-gen/de/jadehs/cosima/parser/antlr/internal/InternalCosimaLang.g:2463:8: 'undefined'
                    {
                    match(input,45,FOLLOW_45_in_ruleStateType4591); 

                            current = grammarAccess.getStateTypeAccess().getUNDEFEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getStateTypeAccess().getUNDEFEnumLiteralDeclaration_2(), null); 
                        

                    }


                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleStateType


 

    public static final BitSet FOLLOW_ruleCosima_in_entryRuleCosima75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCosima85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_14_in_ruleCosima121 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleMachine_in_ruleCosima142 = new BitSet(new long[]{0x0000000000008000L});
    public static final BitSet FOLLOW_15_in_ruleCosima154 = new BitSet(new long[]{0x000001C018020010L});
    public static final BitSet FOLLOW_ruleProgram_in_ruleCosima175 = new BitSet(new long[]{0x000001C018020012L});
    public static final BitSet FOLLOW_ruleMachine_in_entryRuleMachine212 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMachine222 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleComponent_in_ruleMachine267 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_ruleProgram_in_entryRuleProgram303 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleProgram313 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTransitions_in_ruleProgram360 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRegex_in_ruleProgram387 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleGrammar_in_ruleProgram414 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLoop_in_ruleProgram441 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleWhile_in_ruleProgram468 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTuring_in_ruleProgram495 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRegex_in_entryRuleRegex530 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRegex540 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRegex592 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleRegex607 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_17_in_ruleRegex619 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleRegex629 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_ruleRegex639 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRegex657 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleRegex667 = new BitSet(new long[]{0x0000000002000020L});
    public static final BitSet FOLLOW_ruleExpression_in_ruleRegex688 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleRegex698 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpression_in_entryRuleExpression734 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExpression744 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleANDExpression_in_ruleExpression790 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleANDExpression_in_entryRuleANDExpression824 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleANDExpression834 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleORExpression_in_ruleANDExpression881 = new BitSet(new long[]{0x0000000000400002L});
    public static final BitSet FOLLOW_22_in_ruleANDExpression900 = new BitSet(new long[]{0x0000000002000020L});
    public static final BitSet FOLLOW_ruleORExpression_in_ruleANDExpression921 = new BitSet(new long[]{0x0000000000400002L});
    public static final BitSet FOLLOW_ruleORExpression_in_entryRuleORExpression959 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleORExpression969 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleKleeneExpression_in_ruleORExpression1016 = new BitSet(new long[]{0x0000000000800002L});
    public static final BitSet FOLLOW_23_in_ruleORExpression1035 = new BitSet(new long[]{0x0000000002000020L});
    public static final BitSet FOLLOW_ruleKleeneExpression_in_ruleORExpression1056 = new BitSet(new long[]{0x0000000000800002L});
    public static final BitSet FOLLOW_ruleKleeneExpression_in_entryRuleKleeneExpression1094 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleKleeneExpression1104 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePrimaryExpression_in_ruleKleeneExpression1151 = new BitSet(new long[]{0x0000000001000002L});
    public static final BitSet FOLLOW_24_in_ruleKleeneExpression1170 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePrimaryExpression_in_entryRulePrimaryExpression1208 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePrimaryExpression1218 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_25_in_rulePrimaryExpression1254 = new BitSet(new long[]{0x0000000002000020L});
    public static final BitSet FOLLOW_ruleExpression_in_rulePrimaryExpression1276 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_26_in_rulePrimaryExpression1285 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStringExpression_in_rulePrimaryExpression1314 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStringExpression_in_entryRuleStringExpression1349 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleStringExpression1359 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleStringExpression1400 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleGrammar_in_entryRuleGrammar1440 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleGrammar1450 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleGrammar1502 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleGrammar1517 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_ruleGrammar1529 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleGrammar1539 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleGrammar1549 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTransitions_in_entryRuleTransitions1585 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTransitions1595 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTransitions1647 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleTransitions1662 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_ruleTransitions1674 = new BitSet(new long[]{0x0000000020140000L});
    public static final BitSet FOLLOW_18_in_ruleTransitions1727 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_ruleTransitions1737 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTransitions1755 = new BitSet(new long[]{0x0000000020140000L});
    public static final BitSet FOLLOW_29_in_ruleTransitions1817 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_ruleTransitions1827 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTransitions1845 = new BitSet(new long[]{0x0000000020140000L});
    public static final BitSet FOLLOW_20_in_ruleTransitions1895 = new BitSet(new long[]{0x0000000000200010L});
    public static final BitSet FOLLOW_ruleTransition_in_ruleTransitions1916 = new BitSet(new long[]{0x0000000000200010L});
    public static final BitSet FOLLOW_21_in_ruleTransitions1927 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTransition_in_entryRuleTransition1963 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTransition1973 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTransition2016 = new BitSet(new long[]{0x0000000040000000L});
    public static final BitSet FOLLOW_30_in_ruleTransition2026 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTransition2044 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleTransition2054 = new BitSet(new long[]{0x0000003A000000C0L});
    public static final BitSet FOLLOW_ruleInstruction_in_ruleTransition2075 = new BitSet(new long[]{0x0000000180000002L});
    public static final BitSet FOLLOW_31_in_ruleTransition2086 = new BitSet(new long[]{0x0000003A000000C0L});
    public static final BitSet FOLLOW_ruleInstruction_in_ruleTransition2107 = new BitSet(new long[]{0x0000000180000002L});
    public static final BitSet FOLLOW_32_in_ruleTransition2120 = new BitSet(new long[]{0x0000003A000000C0L});
    public static final BitSet FOLLOW_ruleInstruction_in_ruleTransition2141 = new BitSet(new long[]{0x0000000080000002L});
    public static final BitSet FOLLOW_31_in_ruleTransition2152 = new BitSet(new long[]{0x0000003A000000C0L});
    public static final BitSet FOLLOW_ruleInstruction_in_ruleTransition2173 = new BitSet(new long[]{0x0000000080000002L});
    public static final BitSet FOLLOW_ruleInstruction_in_entryRuleInstruction2213 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInstruction2223 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTapeInstruction_in_ruleInstruction2269 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTapeInstruction_in_entryRuleTapeInstruction2303 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTapeInstruction2313 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleReadFromTape_in_ruleTapeInstruction2360 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleWriteToTape_in_ruleTapeInstruction2387 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMoveTapeLeft_in_ruleTapeInstruction2414 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMoveTapeRight_in_ruleTapeInstruction2441 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleReadFromTape_in_entryRuleReadFromTape2476 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleReadFromTape2486 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_33_in_ruleReadFromTape2522 = new BitSet(new long[]{0x00000000000000C0L});
    public static final BitSet FOLLOW_RULE_CHAR_in_ruleReadFromTape2543 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_RULE_EPS_in_ruleReadFromTape2563 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_34_in_ruleReadFromTape2582 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleReadFromTape2600 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleWriteToTape_in_entryRuleWriteToTape2638 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleWriteToTape2648 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_ruleWriteToTape2683 = new BitSet(new long[]{0x00000000000000C0L});
    public static final BitSet FOLLOW_RULE_CHAR_in_ruleWriteToTape2702 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_RULE_EPS_in_ruleWriteToTape2722 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_34_in_ruleWriteToTape2741 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleWriteToTape2759 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMoveTapeLeft_in_entryRuleMoveTapeLeft2797 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMoveTapeLeft2807 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_36_in_ruleMoveTapeLeft2851 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_34_in_ruleMoveTapeLeft2862 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleMoveTapeLeft2880 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMoveTapeRight_in_entryRuleMoveTapeRight2918 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMoveTapeRight2928 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleMoveTapeRight2972 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_34_in_ruleMoveTapeRight2983 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleMoveTapeRight3001 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLoop_in_entryRuleLoop3039 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLoop3049 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleLoop3101 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleLoop3116 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_38_in_ruleLoop3128 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleLoop3138 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleLoop3148 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleWhile_in_entryRuleWhile3184 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleWhile3194 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleWhile3246 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWhile3261 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_ruleWhile3273 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleWhile3283 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleWhile3293 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTuring_in_entryRuleTuring3329 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTuring3339 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTuring3391 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleTuring3406 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_40_in_ruleTuring3418 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleTuring3428 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleTuring3438 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleComponent_in_entryRuleComponent3474 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleComponent3484 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTape_in_ruleComponent3531 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStack_in_ruleComponent3558 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStatesRegister_in_ruleComponent3585 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTape_in_entryRuleTape3620 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTape3630 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTape3681 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleTape3696 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleTape3706 = new BitSet(new long[]{0x0000000000100002L});
    public static final BitSet FOLLOW_20_in_ruleTape3717 = new BitSet(new long[]{0x0000000000000120L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleTape3736 = new BitSet(new long[]{0x0000000000300000L});
    public static final BitSet FOLLOW_RULE_ML_STRING_in_ruleTape3756 = new BitSet(new long[]{0x0000000000300000L});
    public static final BitSet FOLLOW_20_in_ruleTape3775 = new BitSet(new long[]{0x00000000000000C0L});
    public static final BitSet FOLLOW_RULE_CHAR_in_ruleTape3794 = new BitSet(new long[]{0x0000000080200000L});
    public static final BitSet FOLLOW_RULE_EPS_in_ruleTape3814 = new BitSet(new long[]{0x0000000080200000L});
    public static final BitSet FOLLOW_31_in_ruleTape3833 = new BitSet(new long[]{0x00000000000000C0L});
    public static final BitSet FOLLOW_RULE_CHAR_in_ruleTape3852 = new BitSet(new long[]{0x0000000080200000L});
    public static final BitSet FOLLOW_RULE_EPS_in_ruleTape3872 = new BitSet(new long[]{0x0000000080200000L});
    public static final BitSet FOLLOW_21_in_ruleTape3892 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleTape3904 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStack_in_entryRuleStack3942 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleStack3952 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleStack4003 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleStack4018 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_41_in_ruleStack4028 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStatesRegister_in_entryRuleStatesRegister4064 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleStatesRegister4074 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleStatesRegister4125 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleStatesRegister4140 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleStatesRegister4150 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleStatesRegister4160 = new BitSet(new long[]{0x00003C0000000010L});
    public static final BitSet FOLLOW_ruleState_in_ruleStatesRegister4181 = new BitSet(new long[]{0x00003C0000200010L});
    public static final BitSet FOLLOW_21_in_ruleStatesRegister4192 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleState_in_entryRuleState4228 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleState4238 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_42_in_ruleState4291 = new BitSet(new long[]{0x0000380000000010L});
    public static final BitSet FOLLOW_ruleStateType_in_ruleState4326 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleState4344 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_42_in_ruleState4384 = new BitSet(new long[]{0x0000380000000010L});
    public static final BitSet FOLLOW_ruleStateType_in_ruleState4419 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleState4437 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleState4452 = new BitSet(new long[]{0x0000000080200010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleState4470 = new BitSet(new long[]{0x0000000080200000L});
    public static final BitSet FOLLOW_31_in_ruleState4482 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleState4500 = new BitSet(new long[]{0x0000000080200000L});
    public static final BitSet FOLLOW_21_in_ruleState4512 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_43_in_ruleStateType4561 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_44_in_ruleStateType4576 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_45_in_ruleStateType4591 = new BitSet(new long[]{0x0000000000000002L});

}
